PostgreSQL로 사용자 정의 수로 정렬하는 방법은 무엇입니까?
-
05-07-2019 - |
문제
두 개의 테이블이 있습니다.
회사 : (ID, 이름)
근로자 : (ID, 이름, 국가)
나는 모든 회사를 구하고 주어진 국가의 직원 수를 분류하고 싶습니다.
미국에서 더 많은 근로자가있는 회사를 찾고있는 쿼리의 경우 결과는 다음과 같습니다.
#workers from USA | company id | company name
----------------------------------------------
90 6 foo corp
45 9 bar corp
0 3 foobar corp
나는 시도했다 :
select
count(w.country='USA') as mycount,
w.company_id,
c.company_name
from
companies c
left join workers w on
c.id=w.company_id
group by
w.company_id,
c.company_name
order by mycount desc;
그러나 그것은 국가에 관계없이 모든 근로자를 계산하고 있습니다.
어떤 아이디어?
해결책
상관 관계 서브 쿼리로 쉽게 할 수 있습니다.
SELECT
(SELECT count(*) FROM workers w WHERE w.company_id=c.id AND w.country='USA') AS mycount,
c.id,
c.company_name
FROM
companies c
ORDER BY mycount DESC
다른 팁
Count (w.country = 'USA')를 Count (*)에 교체합니까? 왼쪽 가입 잎이 특정 회사/국가를 위해 당겨진 일련의 근로자가 빈 세트 일 가능성을 열어주기 때문에 쿼리는 근로자가 아닌 회사 테이블의 필드를 참조해야한다고 생각합니다.
노력하다:
select count(*) as mycount,
c.company_id,
c.company_name
from companies c
left join workers w on c.id=w.company_id
group by c.company_id, c.company_name
order by mycount desc;
제휴하지 않습니다 StackOverflow