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

SQL JOIN统计关联数量含0值时遗漏丹麦记录的问题与解决

问题原因

  • 你的SQL语句违反了SQL标准的GROUP BY一致性规则:你在SELECT子句中使用了非聚合字段country.name,但GROUP BY子句仅指定了human.homeland字段。只有当数据库开启了非严格的SQL模式(比如低版本MariaDB默认关闭ONLY_FULL_GROUP_BY的情况)才会允许这种语法执行,但执行结果不具备确定性。
  • 对于没有对应人口记录的国家,human.homeland字段的值为NULL,所有homeland为NULL的行都会被合并为同一组:你看到的挪威0人口的结果,实际是挪威和丹麦两个国家的行被合并后,数据库随机取了其中一个国家的名称返回,因此丹麦的记录被覆盖消失。

通用解决方案(兼容所有标准SQL数据库)

将GROUP BY的字段替换为country表的唯一标识字段,确保分组逻辑按国家维度拆分,不会合并无人口的国家,符合所有主流数据库的语法要求:

SELECT country.name, COUNT(human.name) AS population
FROM human
RIGHT JOIN country ON human.homeland = country.id
GROUP BY country.id, country.name;

如果你的数据库支持仅按主键分组(主键可唯一确定行的场景,比如PostgreSQL、MySQL 8.0+、高版本MariaDB),也可以简化为:

SELECT country.name, COUNT(human.name) AS population
FROM human
RIGHT JOIN country ON human.homeland = country.id
GROUP BY country.id;

执行后即可得到包含丹麦的正确统计结果:

+---------+------------+
| name    | population |
+---------+------------+
| Finland | 2          |
| Sweden  | 1          |
| Norway  | 0          |
| Denmark | 0          |
+---------+------------+

内容的提问来源于stack exchange,提问作者Jori Mäntysalo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:06:10