Sql 选择有关列中最常见事件的所有信息
我需要选择管理最多其他员工的员工的所有信息 我的桌子在这里: 开斋节 fName 名字 工作 经理 雇佣 101 亚当 史密斯 经理 102 1998-04-12 102 伊丽莎 兰德 经理 101 1999-03-07 103 伊姆兰 可汗 销售额 102 2003-04-17Sql 选择有关列中最常见事件的所有信息,sql,sql-server,Sql,Sql Server,我需要选择管理最多其他员工的员工的所有信息 我的桌子在这里: 开斋节 fName 名字 工作 经理 雇佣 101 亚当 史密斯 经理 102 1998-04-12 102 伊丽莎 兰德 经理 101 1999-03-07 103 伊姆兰 可汗 销售额 102 2003-04-17 您需要在查询中使用ORDER BY子句,才能找到员工最多的经理。 将其用作WHERE子句中的子查询: SELECT * FROM Employee WHERE eID = ( SELECT TOP 1 Manage
您需要在查询中使用
ORDER BY
子句,才能找到员工最多的经理。将其用作
WHERE
子句中的子查询:
SELECT *
FROM Employee
WHERE eID = (
SELECT TOP 1 Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
SELECT *
FROM Employee
WHERE eID IN (
SELECT TOP 1 WITH TIES Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
如果要返回领带,请在查询中使用带领带的TOP 1
,并在WHERE
子句中使用in
运算符:
SELECT *
FROM Employee
WHERE eID = (
SELECT TOP 1 Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
SELECT *
FROM Employee
WHERE eID IN (
SELECT TOP 1 WITH TIES Manager
FROM Employee
GROUP BY Manager
ORDER BY COUNT(*) DESC
)
请参阅。
您可以尝试通过这种方式获取所有
“管理大多数其他员工”
上的演示
输出
eID fName lName Job Manager Hired
102 Eliza Rynd Manager 101 1999-03-07 00:00:00.000
您可以使用CTE来分离逻辑,并获得计数最高的经理。如果两名经理管理相同数量的员工,请使用带领带的
,
,否则将排除一名经理
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
请给我们您的样本数据和预期结果:刚刚添加了所有daya@NguyễnVănPhong的预期结果是显示有关Eliza的所有信息,因为她管理的人最多。请实际显示您的预期结果,而不是期望人们阅读评论。
根据您提供的示例数据,下面返回null
,该查询不返回NULL
值。我不认为Eliza
的Manager
是101
?这是迄今为止最好的解释-但是还应该添加一个重要的解释,为什么应该使用Max count而不是“
无法实现(假设它是Max(count(…))
。您不能嵌套聚合函数,这只是无效语法。我知道这一点,但正如我在问题中引用的那样,OP似乎不是。可能还需要解释为什么必须使用ORDER BY
。