You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:06:02