2011-08-02 12 views

Odpowiedz

4
SELECT 
    Manager, 
    count(Manager) AS 'Num of Emps' 
FROM 
    emp 
GROUP BY 
    Manager 
ORDER BY 
    'Num of Emps' DESC 

Pierwszy rekord będzie menedżerem z największą liczbą pracowników. Ponadto, w oparciu o dostawcę bazy danych, możesz ograniczyć zestaw wyników do 1, dzięki czemu uzyskasz najwyższy rekord. Oto przykład przy użyciu serwera sql:

SELECT 
    TOP 1 Manager, 
    count(Manager) AS 'Num of Emps' 
FROM 
    emp 
GROUP BY 
    Manager 
ORDER BY 
    'Num of Emps' DESC 
13
select manager, count(*) as employees from emp 
    group by manager 
    order by count(*) desc 

Zrób pierwszy rekord. W zależności od wersji SQL możesz to zrobić za pomocą instrukcji limit.

+0

Dziękuję . Dzięki temu mój dzień był o wiele łatwiejszy! –

0

Jeśli chcesz wiersz z tabeli emp, użyj tego:

select * from emp 
where empid in (select manager from 
    (select manager, count(*) 
    from emp 
    group by 1 
    having count(*) = (select max(count) from (select manager, count(*) as count from emp group by 1) x) 
    ) y); 

To będzie także zwracać wiele wierszy w przypadku jest remis pod względem liczby pracowników.

4

W SQL Server ...

SELECT TOP 1 Manager 
FROM (SELECT Manager, 
       COUNT(Manager) as "ManagerCount" 
     FROM emp 
     GROUP BY Manager 
     ORDER BY "ManagerCount" DESC) 

Oracle jest nieco inna ...

SELECT Manager 
FROM (SELECT Manager, 
       COUNT(Manager) as "ManagerCount" 
     FROM emp 
     GROUP BY Manager 
     ORDER BY "ManagerCount" DESC) 
WHERE ROWNUM <= 1 
0
SELECT 
    count(e.last_name) count, 
    d.last_name 
FROM 
    employees e 
LEFT OUTER JOIN employees d ON e.manager_id = d.employee_id 
GROUP BY 
    d.last_name 
ORDER BY 
    count DESC; 
2

w PostgreSQL, tworzenie schematu Test:

create table Test.Employee (Emp_id numeric, manager_id numeric, Manager_name varchar(20)); 

insert into Test.Employee(emp_id, manager_id, manager_name) values(1, 3, 'A'), (2, 3, 'A'), (3, 3, 'A'), (4, 3, 'A'), (5, 11, 'B'), (6, 12, 'C'), (7, 11, 'B'); 

select manager_name from (select count(manager_id) as mcount, manager_name from test.employee group by manager_name order by mcount DESC) AS TEMP limit 1 
Powiązane problemy