Как сортировать по индивидуальному счетчику с помощью postgresql?

StackOverflow https://stackoverflow.com/questions/1403456

  •  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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top