You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server查询问题:获取每个MGR_ID对应员工数最多的站点

正确SQL解决方案:获取每个经理对应员工数最多的站点

你的原查询问题在于,外层查询的分组逻辑和CTE完全一致,MAX(MgCnt)只是返回每个分组自身的员工计数,并没有筛选出每个MGR_ID下计数最大的站点,因此会返回所有分组行。

要实现“保留每个MGR_ID下员工数最多的站点,并列最大值全部保留”的需求,推荐使用**窗口函数RANK()**来完成筛选,具体SQL如下:

WITH cte_mgr AS
(
    SELECT
        MGR_ID, 
        SITE, 
        COUNT(*) AS MgCnt,
        -- 按MGR_ID分组,按员工数降序排名,并列最大值的站点排名相同
        RANK() OVER(PARTITION BY MGR_ID ORDER BY COUNT(*) DESC) AS RankNum
    FROM  
        #EMP e
    GROUP BY
        e.MGR_ID, e.SITE
)
SELECT
    MGR_ID, 
    SITE, 
    MgCnt
FROM
    cte_mgr
WHERE
    RankNum = 1;

逻辑说明:

  1. 第一步CTE中,先按MGR_ID和SITE分组,统计每个经理对应每个站点的员工数MgCnt。
  2. 同时用RANK()窗口函数,对每个MGR_ID下的站点按员工数降序排名:员工数最多的站点排名为1,若有多个站点员工数相同且为最大值,它们的排名都会是1。
  3. 最后筛选出排名为1的行,就是每个经理下员工数最多的站点(含并列情况)。

如果需要处理更复杂的并列场景(比如存在多个层级的并列),也可以用DENSE_RANK()替代RANK(),二者在当前需求下效果一致。

内容的提问来源于stack exchange,提问作者SilverFish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:35:08