2014-03-01 2 views
0

요 전날 전화 화면에서이 질문을 받았는데 문제가있었습니다. 다음 표가 있다고 가정합니다. 이것은 직원의 테이블이며 한 명 이상의 직원이 동일한 관리자를 가질 수 있습니다.SQL에서 목록 및 개수 반환

+------------+--------------+------+ 
| Field  | Type   | Null | 
+------------+--------------+------+ 
| name  | varchar(40) | NO | 
| department | varchar(100) | NO | 
| supervisor | varchar(100) | NO | 
+------------+--------------+------+ 

수퍼바이저 목록을 반환하고 수퍼바이저 수를 몇 명의 직원 수로 계산하려면 어떤 쿼리를 작성해야합니까?

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

+0

MySQL을 사용하고 있습니다. –

답변

1

당신은 같은 것을 사용하는 것이 그냥 행은 관리자에 의해 그룹화 카운트 않는

select supervisor, count(name) 
from employees 
group by supervisor ; 
0
select supervisor, count(*) as cnt 
from emp 
group by supervisor 
0

이를 "자체 조인"이라고하며 테이블 별칭을 사용해야합니다.

SELECT supervisor, COUNT(*) as managed_employees_n 
FROM Employees 
GROUP BY supervisor 

이를 :

SELECT a.*, COUNT(b.name) AS numsubs 
    FROM employees AS a 
    LEFT JOIN employees AS b 
    ON a.name = b.supervisor 
    GROUP BY b.supervisor 
0

(당신의 supervisor 열이 다른 테이블에 대한 참조하지 않습니다 가정) 당신은 2 단계만으로 계층 구조가 있다고 가정합니다 : 감독자의 감독자가 없습니다.

실제 시나리오에서는 이러한 이름을 ID로 변환해야합니다. 그렇지 않으면 이름별로 그룹화하면 잘못된 결과가 발생할 수 있습니다 ... "John Doe"라고 불리는 두 명의 수퍼바이저를 만난다면 어떻게 될까요?