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

Oracle SQL SUM聚合查询结果异常问题排查求助

SQL查询问题分析与修复

你的查询核心问题是GROUP BY子句的分组依据错误:

  • 你在SELECT里用CASE把不同动物映射成了bird/mammal,但GROUP BY依然使用原始表的animal字段。
  • Oracle的GROUP BY逻辑是基于原始列计算的,不会识别SELECT里的别名,导致每个原始动物(chicken、dog、cat)单独分组。虽然CASE把它们转成了统一的标签,但分组还是按原始值拆分,所以SUM只计算了单个动物的legs,最终出现重复的bird和mammal行,总和没有正确聚合。

修正方案一:GROUP BY复用CASE表达式

把SELECT里的CASE表达式直接放到GROUP BY中,让分组逻辑和SELECT的映射逻辑完全一致:

SELECT
    CASE
        WHEN animal IN ('chicken', 'crow') THEN 'bird'
        WHEN animal IN ('dog', 'cat') THEN 'mammal'
        ELSE animal
    END AS animal,
    SUM(legs) AS legs
FROM t1
WHERE
    animal IN ('chicken', 'crow', 'dog', 'cat')
GROUP BY
    CASE
        WHEN animal IN ('chicken', 'crow') THEN 'bird'
        WHEN animal IN ('dog', 'cat') THEN 'mammal'
        ELSE animal
    END

修正方案二:用子查询先映射再分组

先通过子查询把原始动物转成目标分组标签,再对转换后的结果进行分组聚合,这样GROUP BY就能直接使用别名:

SELECT animal, SUM(legs) AS legs
FROM (
    SELECT
        CASE
            WHEN animal IN ('chicken', 'crow') THEN 'bird'
            WHEN animal IN ('dog', 'cat') THEN 'mammal'
            ELSE animal
        END AS animal,
        legs
    FROM t1
    WHERE animal IN ('chicken', 'crow', 'dog', 'cat')
)
GROUP BY animal

两种方案都能得到你想要的预期结果:

animallegs
bird4
mammal8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:24:50