Snowflake SQL如何实现SUM计算指定值在所有行重复展示
SELECT TO_CHAR(TO_DATE(ab.activity_date), 'YYYY-MM-DD') AS "Activity Date", COALESCE(SUM(ab.2015), 0) AS "sum_2015", COALESCE(MAX(SUM(CASE WHEN TO_CHAR(TO_DATE(ab.activity_date), 'YYYY-MM-DD') = '2015-01-31' THEN ab.2015 END)) OVER (), 0) AS "eoy_2015", COALESCE(SUM(ab.2016), 0) AS "sum_2016", COALESCE(SUM(ab.arr_2017), 0) AS "sum_2017" FROM ab GROUP BY TO_DATE(ab.activity_date)
逻辑说明
核心修改是在原eoy_2015的聚合逻辑外层套了全局窗口函数:
- 内层
SUM(CASE ...)保留原有逻辑,计算得到仅2015-01-31行有对应求和值、其余行结果为0的中间值 - 外层
MAX(...) OVER ()没有设置分区、排序条件,作用域为查询返回的所有行,直接取所有行中该中间值的最大值,也就是2015-01-31行的求和结果,自动同步到所有行 - 保留
COALESCE做空值兼容,当表中不存在2015-01-31的记录时返回0而非NULL
同时修正了原SQL中sum_2017字段尾部多余的逗号,避免执行语法报错。
内容的提问来源于stack exchange,提问作者tennis_fan89
相关产品推荐
相关产品推荐

