Как сортировать по индивидуальному счетчику с помощью postgresql?
-
05-07-2019 - |
Вопрос
У меня есть две таблицы:
Компании:(идентификатор, имя)
Рабочие:(идентификатор, имя, страна)
Я хотел бы получить все компании и отсортировать их по количеству сотрудников из определенной страны.
Для запроса о компаниях, в которых больше работников из США, результат должен быть следующим:
#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;
Но это считая всех рабочих, независимо от их стран.
Есть идеи?
Решение
Вы можете легко сделать это с помощью коррелированного подзапроса:
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
Другие советы
Помогает ли замена 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;