如何修改SQL的CASE表达式,添加type='A'条件并生成2023年估算值
修正SQL CASE表达式实现2023年Type='A'成本估算分组求和
需求明确
针对包含id、transaction_date、cost、type字段的数据表,我们需要实现:
- 仅筛选
type='A'的数据进行计算 - 统计2022年
type='A'的实际成本总和 - 以2022年总和的1.5倍作为2023年的估算成本
- 按年份分组展示实际值与估算值
原有查询的问题分析
- 缺少2023年估算逻辑:未通过CASE表达式或子查询生成并返回2023年的估算行
- 未筛选
type='A':计算时混入其他类型数据,导致成本总和结果错误
正确实现方案
方案1:用UNION ALL合并实际数据与估算数据
逻辑清晰,拆分2022实际统计和2023估算生成两个部分,再合并结果:
-- 统计2022年Type='A'的实际成本 SELECT EXTRACT(YEAR FROM transaction_date) AS year, SUM(cost) AS total_cost, '实际值' AS value_type FROM your_table WHERE type = 'A' AND EXTRACT(YEAR FROM transaction_date) = 2022 GROUP BY EXTRACT(YEAR FROM transaction_date) UNION ALL -- 生成2023年Type='A'的估算成本(2022年总和 × 1.5) SELECT 2023 AS year, (SELECT SUM(cost) FROM your_table WHERE type = 'A' AND EXTRACT(YEAR FROM transaction_date) = 2022) * 1.5 AS total_cost, '估算值' AS value_type
方案2:用子查询+CASE表达式统一处理
通过紧凑结构先获取2022年基准值,再生成2023年估算:
SELECT year, total_cost, value_type FROM ( -- 2022年实际值 SELECT 2022 AS year, SUM(cost) AS total_cost, '实际值' AS value_type FROM your_table WHERE type = 'A' AND EXTRACT(YEAR FROM transaction_date) = 2022 UNION ALL -- 2023年估算值 SELECT 2023 AS year, SUM(cost) * 1.5 AS total_cost, '估算值' AS value_type FROM your_table WHERE type = 'A' AND EXTRACT(YEAR FROM transaction_date) = 2022 ) AS combined_results
关键细节说明
- 替换
your_table为你的实际数据表名 - 如果2022年无
type='A'数据,2023年估算值会返回NULL,可通过COALESCE(..., 0)转为0 - 确保
transaction_date为日期类型,EXTRACT(YEAR FROM transaction_date)能正确提取年份
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

