2009-09-09 6 views
14

Tôi có hai bảng:Cách sắp xếp theo số đếm bằng postgresql?

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

Tôi muốn có được tất cả các công ty và sắp xếp chúng theo số lượng employes.

Kết quả sẽ cung cấp cho:

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

tôi đã cố gắng:

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; 

Nhưng điều đó không làm việc vì nó nói với tôi vào nhóm bởi g.name quá:/

Bất kỳ ý tưởng?

Trả lời

19

Bạn đã bí danh bảng và cột như điều tương tự, do đó, không làm điều đó. Nó không phải là không hợp lệ, chỉ là khó khăn để làm theo.

Dù sao, bao gồm tất cả các cột mà bạn đang chọn mà không phải là uẩn trong bạn 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

bàn của tôi thực sự là phải lớn hơn hai cột (thành phố và tên), nên tôi nhóm bởi tất cả của họ? – Ggolo

+0

Tôi nghĩ rằng có bạn nên cho mệnh đề GROUP BY để làm việc, nếu không truy vấn sẽ thất bại – MaxiWheat

+1

@Ggolo: Bất kỳ cột nào bạn đang chọn, bạn phải 'nhóm theo'. – Eric

0

Hãy thử điều này như một subquery:

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