基于Action字段值对Items字段分组求和的实现方案
按ProductID分组计算Items合计值的实现方案
需求说明
给定销售数据表,需按ProductID分组,根据Action字段的规则计算Items的最终合计:
Action = 0:Items不纳入计算Action = 1:Items计入求和(累加)Action = 2:Items从求和结果中扣除(累减)
数据表结构及数据
| ProductID | Items | Price | Action |
|---|---|---|---|
| a1 | 10 | 100 | 1 |
| a1 | 6 | 60 | 0 |
| a1 | 5 | 50 | 2 |
| a2 | 3 | 30 | 1 |
| a2 | 4 | 40 | 0 |
| a2 | 1 | 70 | 2 |
实现方案(SQL)
使用CASE语句对不同Action对应的Items进行值转换,再按ProductID分组求和:
SELECT ProductID, SUM( CASE Action WHEN 1 THEN Items WHEN 2 THEN -Items ELSE 0 END ) AS TotalItems FROM sales_table GROUP BY ProductID;
逻辑解释
- 通过
CASE语句映射Action对应的计算规则:- 当
Action=1,直接取Items原值(用于累加) - 当
Action=2,取Items的负值(用于累减) - 当
Action=0,取0(不参与求和计算)
- 当
- 用
SUM()函数对转换后的值进行求和 - 按
ProductID分组,得到每个产品的最终合计值
执行结果
| ProductID | TotalItems |
|---|---|
| a1 | 5 |
| a2 | 2 |
内容的提问来源于stack exchange,提问作者Ruby Kousinovali
相关产品推荐
相关产品推荐

