Wie durch Zählung mit postgresql sortieren?
-
05-07-2019 - |
Frage
Ich habe zwei Tabellen:
Companies: (id, name, city)
Workers: (id, name)
Ich möchte alle Unternehmen erhalten und sie durch Zahlen von employes sortieren.
Das Ergebnis sollte geben:
count | company id | company name | city
------------------------------------------
90 6 foo corp NY
45 9 bar corp LA
0 3 foobar corp HO
Ich habe versucht:
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;
Aber das funktioniert nicht, wie es mich zu einer Gruppe von g.name sagt auch: /
Irgendwelche Ideen?
Lösung
Sie haben die Tabelle und die Spalte als die gleiche Sache aliased, so tun das nicht. Es ist nicht ungültig, nur schwer zu folgen.
Wie auch immer, sind alle Spalten, die Sie auswählen, die keine Aggregate in Ihrem group by
sind:
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;
Andere Tipps
Versuchen Sie dies als eine Unterabfrage:
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
Wenn Sie nicht möchten, dass die Zählergebnis Rückkehr zu sein (wegen einer ORM-Framework oder so), die Sie direkt in der Reihenfolge von Klausel anwenden könnten:
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;
Getestet in postgreSQL 11