SQL查询返回NULL值求助:species_data表数据汇总异常
问题排查与SQL语句修正
我来帮你梳理下问题所在,你的SQL语句存在几个关键问题,才导致返回全NULL的结果:
问题分析
- 语法错误:
sum(database_value)后面缺少逗号,直接衔接CASE语句会导致数据库解析失败,这是最基础的语法问题。 - 匹配条件完全不匹配:你写的
science_name_short='rhodo'和表中实际数据完全不符——表中所有条目都是以Rhododendron开头的,根本没有等于rhodo的行,所以CASE语句返回NULL,最终整个结果集都是NULL。 - 列名与期望输出不对应:你需要将CASE结果命名为
NAME,sum的结果命名为Number,同时还要添加固定的ID列(因为你期望输出ID为1)。 - 聚合逻辑不明确:你需要明确是汇总所有符合条件的行,要么用WHERE过滤后直接聚合,要么通过GROUP BY配合CASE来分组。
修正后的SQL语句
方案一(直接汇总,适合当前单一属的场景)
这个方案最简洁,直接过滤出目标数据后汇总:
SELECT 1 AS ID, 'Rhododendron Species' AS NAME, SUM(database_value) AS Number FROM species_data WHERE science_name_short LIKE 'Rhododendron%';
方案二(分组聚合,适合未来多属扩展的场景)
如果后续需要对不同属分别汇总,可以用GROUP BY配合CASE实现:
SELECT 1 AS ID, CASE WHEN science_name_short LIKE 'Rhododendron%' THEN 'Rhododendron Species' END AS NAME, SUM(database_value) AS Number FROM species_data GROUP BY CASE WHEN science_name_short LIKE 'Rhododendron%' THEN 'Rhododendron Species' END;
执行结果
运行上述任意语句后,都会得到你期望的输出:
| ID | NAME | Number |
|---|---|---|
| 1 | Rhododendron Species | 18 |
内容的提问来源于stack exchange,提问作者Random guy
相关产品推荐
相关产品推荐

