如何对查询返回的唯一行值按分组维度求和并生成汇总列
需求实现方案
你可以使用SQL的窗口聚合函数SUM() OVER()来实现该需求,不需要嵌套子查询或者额外的GROUP BY拼接,就能直接在原有查询结果基础上新增求和列。
示例语法
假设你的表字段为:
invoice_id:发票编号,也就是示例中17895对应的字段fee_amount:即"Fee Amounts Per Fee"列对应的金额字段- 其他你原有查询的字段
在你原有查询的SELECT列表中新增如下列即可:
SUM(fee_amount) OVER (PARTITION BY invoice_id) AS invoice_total_fee
效果说明
PARTITION BY invoice_id会按发票编号对所有数据分组- 同个发票编号下的所有行都会返回该组所有fee_amount的总和,和你预期的Excel效果完全一致
- 不会影响原有查询返回的其他字段和行数据,不需要调整原有查询的其他逻辑
旧版本数据库兼容方案(不支持窗口函数时使用)
如果你的数据库版本不支持窗口函数,可以用关联子查询的方式实现:
SELECT t.*, (SELECT SUM(fee_amount) FROM your_table t2 WHERE t2.invoice_id = t.invoice_id) AS invoice_total_fee FROM your_table t -- 这里保留你原有查询的WHERE等其他逻辑
内容的提问来源于stack exchange,提问作者Learn SQL-ing
相关产品推荐
相关产品推荐

