SQL Server 按Price分组并对同组Amount求和实现方法咨询
实现思路
- 首先需求里的「分组内第一条数据」默认按Id升序取最小Id对应的记录,和你给出的样例输出规则完全匹配
- 核心逻辑分两步:先对每个Price分组计算Amount总和,再取每个分组内排序第一的Id和对应Type即可,SQL Server支持用窗口函数高效实现该需求,无需多次关联表
可用SQL写法
WITH GroupedData AS ( SELECT Id, Type, Price, SUM(Amount) OVER (PARTITION BY Price) AS TotalAmount, ROW_NUMBER() OVER (PARTITION BY Price ORDER BY Id ASC) AS RowNum FROM 你的实际表名 -- 替换成你自己的数据表名称即可 ) SELECT Id, Type, Price, TotalAmount AS Amount FROM GroupedData WHERE RowNum = 1
逻辑说明
- CTE中先用
SUM() OVER(PARTITION BY Price)计算每个相同Price对应的Amount总和,同一个Price分组的所有行都会得到相同的总和值 - 再用
ROW_NUMBER() OVER(PARTITION BY Price ORDER BY Id ASC)给同一个Price分组的行按Id从小到大排序,最小Id对应的行序号就是1 - 最后过滤出行序号为1的记录,就是你需要的每个分组取首条Id+Type+对应总和的结果
- 如果你的「第一条」判断规则不是按Id升序,只需要修改
ORDER BY后面的排序规则即可适配
内容的提问来源于stack exchange,提问作者Orhan Kalayci
相关产品推荐
相关产品推荐

