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에 의해 그룹화하도록 지시하는대로 작동하지 않습니다 :/
어떤 아이디어?
해결책
당신은 테이블과 열을 똑같은 것으로 별표로 사용 했으므로 그렇게하지 마십시오. 유효하지 않고 따라 가기가 어렵습니다.
어쨌든, 당신이 선택한 모든 열에 집계가 아닌 모든 열을 포함시킵니다. 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;
다른 팁
이것을 하위 쿼리로 사용해보십시오.
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
Count result가 반환되기를 원하지 않으면 (ORM 프레임 워크 때문에) 순서별로 직접 적용 할 수 있습니다.
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