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

GROUP BY结合SUM查询保留空值问题:内连接丢失空值记录求助

解决方法:使用左连接(LEFT JOIN)替代内连接(INNER JOIN)

你的问题核心在于用了INNER JOIN——这种连接逻辑只会保留两张表中完全匹配的记录,而player_no=3的transaction_id是null,无法和Transactions表的id形成匹配,所以这条记录被直接过滤掉了。

要保留所有玩家(哪怕没有交易记录的),你需要改用左连接(LEFT JOIN):它会完整保留左表(这里是Players)的所有记录,右表(Transactions)没有匹配的字段会自动填充为null。另外,为了让聚合结果更直观(比如无交易玩家的总和显示为0而非null),可以用COALESCE函数把null值转换为0。

修改后的查询语句如下:

SELECT 
  p.player_no, 
  COUNT(p.player_no), 
  COALESCE(SUM(t.value), 0) AS total_value
FROM Players p 
LEFT JOIN Transactions t ON p.transaction_id = t.id 
GROUP BY p.player_no

结果说明:

  • player_no=1:对应2条交易记录,COUNT为2,SUM总和是5+2=7
  • player_no=2:对应1条交易记录,COUNT为1,SUM总和是10
  • player_no=3:无匹配交易,COUNT为1(统计的是左表存在的玩家记录),COALESCE把SUM(null)转换成了0

这样就能完整保留所有玩家的记录啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:36