Как отсортировать по индивидуальному счету с помощью postgresql? - PullRequest
0 голосов
/ 10 сентября 2009

У меня есть две таблицы:

Компании: (id, name)

Работники: (идентификатор, имя, страна)

Я хотел бы получить все компании и отсортировать их по количеству сотрудников из данной страны.

Для запроса, который ищет компании, у которых больше работников из США, результат должен дать:

#workers from USA | company id | company name 
----------------------------------------------
        90              6           foo corp     
        45              9           bar corp     
        0               3         foobar corp    

Я пытался:

select 
    count(w.country='USA') as mycount,
    w.company_id,
    c.company_name
from 
    companies c 
    left join workers w on 
        c.id=w.company_id 
group by 
    w.company_id,
    c.company_name
order by mycount desc;

Но это все рабочие, независимо от их страны.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 10 сентября 2009

Вы можете легко сделать это с помощью коррелированного подзапроса:

SELECT
  (SELECT count(*) FROM workers w WHERE w.company_id=c.id AND w.country='USA') AS mycount,
  c.id,
  c.company_name
FROM
  companies c
ORDER BY mycount DESC
0 голосов
/ 10 сентября 2009

Помогает ли замена COUNT (w.country = 'USA') на COUNT (*)? Я полагаю, что ваш запрос должен ссылаться на поля таблицы «Компании», а не на работников, поскольку ваше левое объединение оставляет открытой возможность того, что набор работников, выбранных для конкретной компании / страны, является пустым.

Попытка:

select count(*) as mycount,
       c.company_id,
       c.company_name
from   companies c
left join workers w on c.id=w.company_id 
group by c.company_id, c.company_name
order by mycount desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...