我有一個emp
表與下面的記錄:編寫SQL查詢得到一個值的最大值出現在一列
INSERT into emp(EmpId,Emp name, Manager)
Values(1,A,M1)
values(2,B,M1)
values(3,C,M2)
values(4,D,M3)
我怎樣才能找到Manager
有下他的員工的最大值是多少?在這種情況下,輸出應該是M1
。請幫忙。
我有一個emp
表與下面的記錄:編寫SQL查詢得到一個值的最大值出現在一列
INSERT into emp(EmpId,Emp name, Manager)
Values(1,A,M1)
values(2,B,M1)
values(3,C,M2)
values(4,D,M3)
我怎樣才能找到Manager
有下他的員工的最大值是多少?在這種情況下,輸出應該是M1
。請幫忙。
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
select manager, count(*) as employees from emp
group by manager
order by count(*) desc
就拿第一條記錄。根據您的SQL版本,您可以使用限制語句來完成此操作。
如果你想從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);
這也將返回多行的情況下,有次數最多的員工的領帶。
在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
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;
在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
謝謝。這讓我的一天變得更加輕鬆! –