选择列中最常见的所有信息

时间:2021-04-17 08:53:06

标签: sql sql-server

我需要选择管理其他员工最多的员工的所有信息。

我的桌子在这里:

<头>
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

3 个答案:

答案 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