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

SQL查询中如何以两列为分组键获取分组最大值并对结果累加求和

按用户分组统计年度最高积分总和的SQL实现需求

我正在尝试编写SQL查询,以两列作为分组键,先取出每组的最大值,再对每个分组的最大值求和,后续可自动适配下一组分组键。

示例表结构

现有一张包含年份、用户ID、周次、积分字段的表,每一年对应用户多个周的积分数据,具体内容如下:

yearuseridweekpoints
2020113
2020133
2020135
20201412
2020214
2020224
2020236
20202410
2021114
2021125
2021138
2021149
2021213
2021226
2021237
20212413

具体需求

先取出每个用户每一年的最高积分,再把每个用户的所有年度最高积分相加求和,最终按总积分倒序排序。

预期输出

各用户年度最高积分明细

用户1:
2020, 1, 12
2021, 1, 9
用户2:
2020, 2, 10
2021, 2, 13

求和排序后的最终结果

useridpoints
233
121

查询逻辑需兼容后续新增用户、新增年份的场景,无需修改代码即可适配。

最终实现方案

经过验证可行的查询语句如下:

SELECT username, userdb.userid, SUM(points) as points 
FROM (
    SELECT standing.*, 
           row_number() over (partition by standing.userid, year ORDER BY points desc) AS seqnum 
    FROM standing
) t 
JOIN userdb on userdb.userid = t.userid 
WHERE seqnum = 1 
GROUP BY userid 
ORDER BY points DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 06:36:04