문제

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

회사 : (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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top