按要求处理数据:一行展示合计值与InvoiceId全额合计值
数据处理解决方案:分组聚合与发票全额合计
原始数据表(Table X)
| AccountId | InvoiceId | SeasonId | AmountSold |
|---|---|---|---|
| 1 | I1 | S1 | 5 |
| 1 | I1 | S1 | 5 |
| 1 | I1 | S2 | 6 |
| 1 | I2 | S1 | 8 |
处理需求
- 筛选
AccountId = 1的数据 - 按
SeasonId分组,对同一InvoiceId+SeasonId组合的AmountSold求和 - 计算每个
InvoiceId对应的全额合计值TotalInvoice,并与分组结果同行展示
目标输出结果
| AccountId | InvoiceId | SeasonId | AmountSold | TotalInvoice |
|---|---|---|---|---|
| 1 | I1 | S1 | 10 | 16 |
| 1 | I1 | S2 | 6 | 16 |
| 1 | I2 | S1 | 8 | 8 |
实现代码(SQL)
WITH grouped_data AS ( SELECT AccountId, InvoiceId, SeasonId, SUM(AmountSold) AS AmountSold FROM TableX WHERE AccountId = 1 GROUP BY AccountId, InvoiceId, SeasonId ) SELECT gd.AccountId, gd.InvoiceId, gd.SeasonId, gd.AmountSold, SUM(gd.AmountSold) OVER (PARTITION BY gd.InvoiceId) AS TotalInvoice FROM grouped_data gd ORDER BY gd.InvoiceId, gd.SeasonId;
代码说明
- 先用CTE
grouped_data完成筛选和分组聚合:筛选出AccountId=1的数据,按AccountId、InvoiceId、SeasonId分组,对每组的AmountSold求和,得到各季的销售合计。 - 主查询中使用窗口函数
SUM() OVER (PARTITION BY InvoiceId),对每个InvoiceId下的所有分组求和,得到该发票的全额合计TotalInvoice,并与分组结果关联展示。
内容的提问来源于stack exchange,提问作者Spoelle
相关产品推荐
相关产品推荐

