2011-08-02 47 views

回答

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

第一個記錄將是員工人數最多的經理。另外,基於數據庫提供程序,您可以將結果集限制爲1,因此您只能獲得最高記錄。下面是使用SQL Server的一個例子:

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 

就拿第一條記錄。根據您的SQL版本,您可以使用限制語句來完成此操作。

+0

謝謝。這讓我的一天變得更加輕鬆! –

0

如果你想從EMP表中的行,使用:

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); 

這也將返回多行的情況下,有次數最多的員工的領帶。

4

在SQL Server ...

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

Oracle是一個有點不同......

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

在PostgreSQL,創建模式測試:

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 
相關問題