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

如何对字符串使用GROUP BY与MAX?分组获取出现最多的Team_ID

需求与问题

需要按Department_ID和Employee_ID分组,返回每组中出现次数最多的team_id。

原始数据:
原始数据表

预期输出:
目标数据表

用户原执行SQL:

SELECT [Department_ID]
      ,[Employee_ID]
      , max(team_id)
FROM [AdventureWorksLT2019].[dbo].[table]
GROUP BY 
       [Department_ID]
      ,[Employee_ID]

该语句仅返回每组中team_id的最大值,而非出现次数最多的team_id,因此实际结果不符合预期:
实际结果表

解决方法

可以通过统计分组频次+窗口函数排序的方式实现需求,SQL语句如下:

WITH TeamOccurrences AS (
    SELECT 
        Department_ID,
        Employee_ID,
        team_id,
        COUNT(*) AS count,
        -- 按部门+员工分组,按出现次数降序排序,次数相同时按team_id升序确保结果唯一
        ROW_NUMBER() OVER (PARTITION BY Department_ID, Employee_ID ORDER BY COUNT(*) DESC, team_id) AS rank_num
    FROM [AdventureWorksLT2019].[dbo].[table]
    GROUP BY Department_ID, Employee_ID, team_id
)
SELECT Department_ID, Employee_ID, team_id
FROM TeamOccurrences
WHERE rank_num = 1;

逻辑说明

  1. 先通过CTETeamOccurrences统计每个(Department_ID, Employee_ID, team_id)组合的出现次数
  2. 使用ROW_NUMBER()窗口函数,在每个(Department_ID, Employee_ID)分组内,按出现次数从高到低排序;若多个team_id出现次数相同,按team_id升序排列保证结果唯一
  3. 最后筛选出排名为1的记录,即为每组出现次数最多的team_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:10:24