2017-10-13 1 views
0

이 문제에 대한 도움이 필요합니다."GROUP BY"에서 "COUNT"선택

이 테이블을 갖는

CREATE TABLE Employees (
    Id int, 
    Name varchar(30), 
    Salary Money, 
    BossId int, 
    Ocupation varchar(20)) 

INSERT INTO Employees VALUES(1,'Juan',15000,7,'Ventas') 
INSERT INTO Employees VALUES(2,'Federico',16000,7,'Ventas') 
INSERT INTO Employees VALUES(3,'Marcos',12000,8,'Compras') 
INSERT INTO Employees VALUES(4,'Alberto',9000,8,'Compras') 
INSERT INTO Employees VALUES(5,'Gonzalo',5000,8,'Compras') 
INSERT INTO Employees VALUES(6,'Noelia',13000,7,'Ventas') 
INSERT INTO Employees VALUES(7,'Roberto',20000,9,'Ventas') 
INSERT INTO Employees VALUES(8,'Diego',19000,9,'Ventas') 
INSERT INTO Employees VALUES(9,'Damian',25000,null,'Compras') 

나는, 두 개 이상의 직원의 머리입니다 직원의 담당 직원의 이름, 급여 및 번호를 얻을 수 있습니까?

결과는 다음과 같습니다

Roberto 2000 3 
Diego 19000 3 

감사합니다!

+0

보스 관계의 "깊이"는 둘 이상일 수 있습니까? IE는 C와 D의 보스 인 B의 보스가 될 수 있습니까? –

+0

예, 누구든지 누구의 보스가 될 수 있습니다. IE "Damian"은 "Gonzalo", "Alberto"및 "Marcos"의 보스 인 "Diego"의 보스입니다. –

답변

0
SELECT 
    E1.Name 
    , E1.Salary 
    , COUNT(*) Employees 
FROM 
    Employees E1 
    JOIN Employees E2 ON E1.Id = E2.BossId 
GROUP BY 
    E1.Name 
    , E1.Salary 
HAVING COUNT(*) > 2 
+0

이것은 실제로 @ GianneBoschetto의 이전 댓글에 따라 작동하지 않습니다. A가 C와 D의 보스 인 B의 보스가 될 수 있다고 가정하면이 스크립트는 B를 잘못 반환합니다. 정답은 A와 B입니다. –

+1

아니요. 나는 당신의 질문을 이해하지 못했습니다. 누군가는 누구의 보스가 될 수 있습니다. 그러나 문제는 "직접적인"상사에 관한 것입니다. 내 문제가 잘 작동합니다. –

+1

@DerekBrown 재귀 적 스크립트가 아니기 때문에 스크립트에서 B를 잘못 반환하지는 않습니다. 직접 고용인의 수를 반환합니다. B는 BossId 열에서만 두 번이므로 COUNT (*)는 2가되고 B 행은 반환되지 않습니다. 감사. –

관련 문제