2011-08-02 34 views

Trả lời

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

Kỷ lục đầu tiên sẽ là người quản lý có nhiều nhân viên nhất. Ngoài ra, dựa trên nhà cung cấp db, bạn có thể giới hạn kết quả được đặt thành 1, vì vậy bạn chỉ nhận được bản ghi cao nhất. Dưới đây là một ví dụ sử dụng máy chủ 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 

Hãy ghi đầu tiên. Tùy thuộc vào phiên bản SQL của bạn, bạn có thể làm điều này với một tuyên bố giới hạn.

+0

Cảm ơn bạn . Điều này làm cho ngày của tôi dễ dàng hơn nhiều! –

0

Nếu bạn muốn hàng từ bảng emp, sử dụng này:

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

này cũng sẽ trở lại nhiều hàng trong trường hợp có một cà vạt cho số hầu hết người lao động.

4

Trong SQL Server ...

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

Oracle là một chút khác nhau ...

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

Trong PostgreSQL, tạo schema 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 
Các vấn đề liên quan