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