Как отсортировать по кол-ву с postgresql? - PullRequest
18 голосов
/ 10 сентября 2009

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

Companies: (id, name, city)
Workers: (id, name)

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

Результат должен дать:

count | company id | company name | city
------------------------------------------
90         6           foo corp      NY
45         9           bar corp      LA
0          3         foobar corp     HO

Я пытался:

select 
    c.*, 
    count(w.id) as c 
from 
    companies c 
left join 
    workers w 
on 
    c.id = w.company_id 
group by 
    c.id 
order by 
    c desc;

Но это не работает, так как говорит мне группировать по g.name: /

Есть идеи?

Ответы [ 3 ]

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

Вы связали таблицу и столбец как одно и то же, так что не делайте этого. Это не недействительно, просто трудно следовать.

В любом случае, включите все выбранные вами столбцы, которые не являются агрегатами в вашем group by:

select 
    count(w.id) as mycount,
    w.company_id,
    c.company_name,
    c.city
from 
    companies c 
    left join workers w on 
        c.id=w.company_id 
group by 
    w.company_id,
    c.company_name,
    c.city
order by mycount desc;
1 голос
/ 26 марта 2019

Если вы не хотите, чтобы результат подсчета возвращался (из-за структуры ORM или около того), вы можете применить его непосредственно в предложении order by:

select 
    c.*
from 
    companies c 
left join 
    workers w 
on 
    c.id = w.company_id 
group by 
    c.id 
order by 
    count(w.id) desc;

Проверено в postgreSQL 11

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

Попробуйте это как подзапрос:

SELECT C.*
FROM 
(
  SELECT C.Id, C.Company_Name, C.City, COUNT(W.Id) AS CNT
  FROM Companies C
  LEFT JOIN Workers W ON W.Company_Id = C.Id
  GROUP BY C.Id, C.Company_Name, C.City
) T
ORDER BY T.CNT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...