SQL求和聚合

编程语言 2026-07-09

数据集

动物 腿数
鹦鹉 2
2
4
4
c'thulu 999
missing'no 0

目标

动物 腿数
4
哺乳动物 8

我不确定我的Oracle SQL查询哪里出了问题。它似乎没有正确聚合。

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 animal

当我运行这个查询时,我得到:

动物 腿数
2
2
哺乳动物 4
哺乳动物 4

我的查询哪里出错?WHERE子句是因为我的真实数据量要大得多。

解决方案

你应该对与SELECT子句中出现的完全相同 CASE 表达式进行聚合:

SELECT
    CASE
        WHEN animal IN ('chicken', 'crow') THEN 'bird'
        WHEN animal in ('dog', 'cat') THEN 'mammal'
    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'
    END;

另外请注意你当前的 ELSE 条件并不合理,因此我已将其移除。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章