2017-10-13 104 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的行不會返回。謝謝。 –