2015-12-24 4 views
-2
CREATE TABLE IF NOT EXISTS `Employee` (
    `SSN` varchar(64) NOT NULL, 
    `Name` varchar(64) DEFAULT NULL, 
    `Designation` varchar(128) NOT NULL, 
    `MSSN` varchar(64) NOT NULL, 
    PRIMARY KEY (`SSN`), 
    CONSTRAINT `FK_Manager_Employee` 
       FOREIGN KEY (`MSSN`) REFERENCES Employee(SSN) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO Employee VALUES 
("1", "A", "OWNER", "1"), 

("2", "B", "BOSS", "1"), # Employees under OWNER 
("3", "F", "BOSS", "1"), 

("4", "C", "BOSS", "2"), # Employees under B 
("5", "H", "BOSS", "2"), 
("6", "L", "WORKER", "2"), 
("7", "I", "BOSS", "2"), 
# Remaining Leaf nodes 
("8", "K", "WORKER", "3"), # Employee under F  

("9", "J", "WORKER", "7"), # Employee under I  

("10","G", "WORKER", "5"), # Employee under H 

("11","D", "WORKER", "4"), # Employee under C 
("12","E", "WORKER", "4") ; 

SELECT SUPERVISOR.name AS SuperVisor, 
     GROUP_CONCAT(SUPERVISEE.name ORDER BY SUPERVISEE.name) AS SuperVisee, 
     COUNT(*) 
FROM Employee AS SUPERVISOR 
    INNER JOIN Employee SUPERVISEE ON SUPERVISOR.SSN = SUPERVISEE.MSSN 
GROUP BY SuperVisor; 
+1

пожалуйста, добавить некоторые детали к результату вопрос – Raviteja

+0

является: не выбрано ни одной строки. Зачем? – sumit

+0

@sumit это проблема группы. Группа в одну колонку ... –

ответ

0

Смотреть это:

SELECT SUPERVISOR.name AS SuperVisor, 
     GROUP_CONCAT(SUPERVISEE.name ORDER BY SUPERVISEE.name) AS SuperVisee, 
     COUNT(*) 
FROM Employee AS SUPERVISOR 
    INNER JOIN Employee SUPERVISEE ON SUPERVISOR.SSN = SUPERVISEE.MSSN 
GROUP BY SuperVisor; 

Результат:

+------------+------------+----------+ 
| SuperVisor | SuperVisee | COUNT(*) | 
+------------+------------+----------+ 
| 
| C   | D,E  |  2 | 
| F   | K   |  1 | 
| H   | G   |  1 | 
| I   | J   |  1 | 
+------------+------------+----------+ 
+3

Пожалуйста, объясните, что вы изменили. Для меня это тоже похоже. – Barmar