我需要选择管理其他员工最多的员工的所有信息。
我的桌子在这里:
eID | fName | lName | 作业 | 经理 | 录用 |
---|---|---|---|---|---|
101 | 亚当 | 史密斯 | 经理 | 102 | 1998-04-12 |
102 | 伊丽莎 | Rynd | 经理 | 101 | 1999-03-07 |
103 | 伊姆兰 | 汗 | 销售 | 102 | 2003-04-17 |
Manager 中的值是 eID 的
以下返回 null,我应该使用最大计数吗?
SELECT TOP 1 Manager, COUNT(Manager)
FROM Employee
GROUP BY Manager
预期输出
eID fName lName Job Manager Hired
102 Eliza Rynd Manager 101 1999-03-07 00:00:00.000
答案 0 :(得分:1)
您需要在查询中使用 ORDER BY
子句来获取拥有最多员工的经理。
将其用作 WHERE
子句中的子查询:
SELECT *
FROM Employee
WHERE eID = (
SELECT TOP 1 Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
如果您希望返回关系,请在查询中使用 TOP 1 WITH TIES
并在 IN
子句中使用运算符 WHERE
:
SELECT *
FROM Employee
WHERE eID IN (
SELECT TOP 1 WITH TIES Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
参见demo。
答案 1 :(得分:1)
可以使用CTE来分离逻辑,得到计数最高的经理,如果两个经理管理相同数量的员工,则使用with ties
,否则将排除一个。
with x as (
select top (1) with ties Manager
from Table
group by Manager
order by Count(*) desc
)
select *
from x join Table t on t.eId=x.Manager
答案 2 :(得分:0)
你可以试试这个方法得到所有"manages the most other employees"
SELECT *
FROM @Employee
WHERE eID IN (SELECT TOP 1 WITH ties Manager
FROM @Employee
GROUP BY Manager
ORDER BY COUNT(Manager) DESC)
演示 dbfiddle.uk
输出
eID fName lName Job Manager Hired
102 Eliza Rynd Manager 101 1999-03-07 00:00:00.000