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

SQL中如何按NAME分组获取对应THING的最大SUM(NUM)值

解决方案

你已经通过GROUP BY得到了每个NAME+THING组合的NUM总和,接下来只需从这些分组结果中,为每个NAME筛选出总和最大的那条记录。使用窗口函数是最简洁高效的实现方式:

方法1:用ROW_NUMBER()取唯一最大值记录

WITH grouped_data AS (
    SELECT 
        NAME, 
        THING, 
        SUM(NUM) AS total_num
    FROM this_table 
    GROUP BY NAME, THING
)
SELECT NAME, THING, total_num
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY total_num DESC) AS rn
    FROM grouped_data
) t
WHERE rn = 1;

方法2:用RANK()保留并列最大值

如果某个NAME下存在多个THING的总和相等且同为最大值,RANK()会保留所有并列记录(ROW_NUMBER()会随机选一条):

WITH grouped_data AS (
    SELECT 
        NAME, 
        THING, 
        SUM(NUM) AS total_num
    FROM this_table 
    GROUP BY NAME, THING
)
SELECT NAME, THING, total_num
FROM (
    SELECT 
        *,
        RANK() OVER (PARTITION BY NAME ORDER BY total_num DESC) AS rk
    FROM grouped_data
) t
WHERE rk = 1;

逻辑说明

  1. 先通过CTE(grouped_data)生成你已得到的分组总和结果;
  2. 外层查询用窗口函数按NAME分组(PARTITION BY NAME),再按总和降序排序,给每条记录标记序号;
  3. 筛选序号为1的记录,即为每个NAME下总和最大的条目。

执行后会得到你期望的结果:

abc,thing1,10
jkl,thing1,100
xyz,thing2,200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:03