SQL需求:按Serial#分组计算Cost与Qty乘积之和并关联至每条记录
解决SQL分组求和并映射到每条记录的问题
没问题,我来帮你搞定这个需求!你想要给每条记录加上对应Serial#分组的总费用,这个需求确实可以用子查询实现,当然还有更简洁的窗口函数方案,我都给你列出来:
方法一:使用子查询(你提到的思路)
先通过子查询计算每个Serial#对应的总费用,再把这个结果和原表关联,就能把总费用映射到每条记录上了:
SELECT t.ID, t.Serial#, t.`Part #`, t.Cost, t.Qty, total.TotalCost AS "Total Cost" FROM your_table t JOIN (SELECT Serial#, SUM(Cost * Qty) AS TotalCost FROM your_table GROUP BY Serial#) total ON t.Serial# = total.Serial#;
逻辑说明:
- 子查询部分:按
Serial#分组,计算每组内Cost*Qty的总和,得到每个分组的总费用。 - 主查询:把原表和子查询的结果通过
Serial#关联,这样每条原表记录就能拿到对应分组的总费用了。
方法二:使用窗口函数(更简洁高效)
如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),用SUM() OVER()会更简单,不需要子查询:
SELECT ID, Serial#, `Part #`, Cost, Qty, SUM(Cost * Qty) OVER (PARTITION BY Serial#) AS "Total Cost" FROM your_table;
逻辑说明:
SUM(Cost * Qty) OVER (PARTITION BY Serial#) 会自动按Serial#分组,计算每组内Cost*Qty的总和,并把这个值填充到该组的每一条记录中,一步到位!
输出结果验证
不管用哪种方法,最终输出都会是你想要的样子:
| ID | Serial# | Part # | Cost | Qty | Total Cost |
|---|---|---|---|---|---|
| 1 | ABC | 1 | 100 | 1 | 400 |
| 2 | ABC | 2 | 100 | 2 | 400 |
| 3 | ABC | 3 | 100 | 1 | 400 |
| 4 | DEF | 1 | 100 | 1 | 200 |
| 5 | DEF | 2 | 100 | 1 | 200 |
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

