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

Redshift为何要求按所有列分组?Aurora SQL迁移查询遇阻求助

问题分析
  • 错误根源:你在CASE语句里直接引用了原表的cantidad_retornos列,而非聚合后的统计结果。Redshift严格遵循SQL标准,要求SELECT中的所有非聚合列必须出现在GROUP BY中,或者用聚合函数包裹。
  • Aurora能正常运行的原因:Aurora(MySQL兼容)默认允许非聚合列与GROUP BY列存在函数依赖时省略(比如id是主键,rut、name依赖id),但Redshift不支持这种宽松规则,必须严格执行标准。
修正后的查询语句
select 
    rut,
    name,
    id,
    sum(cantidad_retornos) as cantidad_retornos,
    sum(cantidad_aceptadas) as cantidad_aceptadas,
    sum(cantidad_auto_accept) as cantidad_auto_accept,
    sum(cantidad_rechazadas) as cantidad_rechazadas,
    sum(cantidad_aceptadas) - sum(cantidad_auto_accept) as cantidad_aceptadas_manual,
    coalesce((sum(cantidad_aceptadas) - sum(cantidad_auto_accept)) / nullif(sum(cantidad_aceptadas),0)) as per_aceptadas_manual,
    coalesce(sum(cantidad_auto_accept) / nullif(sum(cantidad_aceptadas),0),0) as per_aceptadas_auto,
    coalesce(sum(cantidad_rechazadas) / nullif(sum(cantidad_retornos),0),0) AS rechazo_per,
    case
        when coalesce(sum(cantidad_rechazadas) / nullif(sum(cantidad_retornos),0) ,0) < 0.1 or sum(cantidad_retornos) < 10 then 'Confiable' 
        when coalesce(sum(cantidad_rechazadas) / nullif(sum(cantidad_retornos),0),0) >= 0.1 and coalesce(sum(cantidad_rechazadas) / nullif(sum(cantidad_retornos),0),0) < 0.5 then 'Estándar'
        when coalesce(sum(cantidad_rechazadas) / nullif(sum(cantidad_retornos),0),0) >= 0.5 then 'Poco confiable'
        else 'Sin clasificar' 
    end as nivel_confianza
from table
where 1=1 
group by id, name, rut
关键修改点
  • 将CASE语句中的cantidad_retornos < 10替换为sum(cantidad_retornos) < 10,确保引用的是分组后的总返回量,而非单条记录的返回量。
  • 保持GROUP BY仅包含id, name, rut,这三列是你需要的分组维度,符合预期结果需求。

内容的提问来源于stack exchange,提问作者gas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:25:20