문제

두 개의 테이블이 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top