2017-10-13 98 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可以A是C和D的老板B的老板吗? –

+0

是的,任何人都可以成为任何人的老板。 IE“Damian”是“Gonzalo”,“Alberto”和“Marcos”的老板“迭戈”的老板。 –

回答

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的行不会返回。谢谢。 –