2009-09-09 16 views
14

Mam dwie tabele:Jak sortować według liczby z postgresql?

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

chciałbym, aby wszystkie przedsiębiorstwa i sortować je według numerów zatrudnia.

Wynik powinien podać:

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

Próbowałem:

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; 

ale to nie działa tak jak mówi mi do grupy przez g.name zbyt:/

pomysłów?

Odpowiedz

19

pan alias tabeli i kolumny jako to samo, więc nie rób tego. To nie jest nieważne, tylko trudne do naśladowania.

W każdym razie, to wszystkie kolumny, że jesteś wybranie, które nie są agregaty w twojej 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; 
+0

mój stół jest rzeczywiście musi większa niż tych dwóch kolumnach (miejskich i nazwa), powinienem grupa przez cały z nich? – Ggolo

+0

Myślę, że tak, aby klauzula GROUP BY działała, jeśli nie, zapytanie się nie powiedzie – MaxiWheat

+1

@Ggolo: Dowolna kolumna, którą wybierasz, musisz "grupować według". – Eric

0

Spróbuj to jako podzapytania:

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 
Powiązane problemy