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

AWS Athena中SQL CASE WHEN ELSE语句报错求助

问题分析与解决

报错原因

  1. 你错误地在CASE语句里嵌套了完整的SELECT子查询,这种写法不符合Athena(基于Presto)的SQL规则——外层已经在执行分组聚合逻辑,内层没必要再写独立的查询返回多字段结果。
  2. 报错提示的本质是:外层查询的SELECT列表里,你试图用CASE返回包含多个字段的结果集,但外层已经按projectid、fiscalYear、status分组,正确的做法应该是把判断逻辑嵌入到聚合函数内部,而非嵌套子查询。

修正后的SQL

不需要在WHEN和ELSE里重复FROM和GROUP BY内容,直接把CASE逻辑放到SUM函数里即可:

SELECT
    projectbudgets.projectid,
    projectbudgetyears.year AS fiscalYear,
    projectbudgetyears.status,
    SUM(
        CASE
            WHEN projectbudgetlineitems.costitemid IN (462561,462562,462563,462564,462565,462566,478030) THEN
                (0 * projectbudgetlineitems.unitcost) * (projectbudgetlineitems.costshare * 1E-2)
            ELSE
                (projectbudgetlineitems.quantity * projectbudgetlineitems.unitcost) * (projectbudgetlineitems.costshare * 1E-2)
        END
    ) AS total
FROM
    (("acorn-prod-etl".target_acorn_prod_acorn_projectbudgets projectbudgets
INNER JOIN "acorn-prod-etl".target_acorn_prod_acorn_projectbudgetyears projectbudgetyears ON (projectbudgets.id = projectbudgetyears.projectbudgetid))
INNER JOIN "acorn-prod-etl".target_acorn_prod_acorn_projectbudgetlineitems projectbudgetlineitems ON (projectbudgetyears.id = projectbudgetlineitems.projectbudgetyearid))
GROUP BY projectbudgets.projectid, projectbudgetyears.year, projectbudgetyears.status

调整说明

  • 把CASE判断直接放到SUM函数内部,对每条符合条件的记录计算对应的值,再统一聚合求和,完全符合分组聚合的逻辑。
  • 外层SELECT直接列出分组字段和聚合后的total,和GROUP BY的字段一一对应,解决了语法报错问题,同时实现了“特定costitemid分类的预算总额替换为0”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:10:48