Redshift SQL长表转宽表出现GROUP BY相关报错问题咨询
错误原因
你当前的代码将聚合函数SUM写在了CASE WHEN判断的内部,此时date字段没有被聚合函数包裹,也没有出现在GROUP BY子句中,违反了SQL聚合查询的规则:所有未在聚合函数中使用的非分组字段,都必须包含在GROUP BY列表里,因此触发报错。
你的逻辑顺序写反了,正确逻辑应该是先逐行判断日期所属的月份,再对符合对应月份条件的订阅数做聚合求和。
修正后的SQL代码
SELECT country, SUM(CASE WHEN date BETWEEN '2021-10-01' AND '2021-10-31' THEN subscribers ELSE 0 END) AS "Oct-21", SUM(CASE WHEN date BETWEEN '2021-11-01' AND '2021-11-30' THEN subscribers ELSE 0 END) AS "Nov-21", SUM(CASE WHEN date BETWEEN '2021-12-01' AND '2021-12-31' THEN subscribers ELSE 0 END) AS "Dec-21" FROM source_table GROUP BY country
更简洁的PIVOT语法实现(Redshift原生支持)
如果你不想手动写大量CASE WHEN语句,可以直接使用Redshift的PIVOT行转列语法,代码更易维护:
SELECT * FROM ( SELECT country, TO_CHAR(date, 'Mon-YY') AS month, subscribers FROM source_table WHERE date BETWEEN '2021-10-01' AND '2021-12-31' ) PIVOT ( SUM(subscribers) FOR month IN ('Oct-21', 'Nov-21', 'Dec-21') ) ORDER BY country
内容的提问来源于stack exchange,提问作者f722axzo5d
相关产品推荐
相关产品推荐

