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=7player_no=2:对应1条交易记录,COUNT为1,SUM总和是10player_no=3:无匹配交易,COUNT为1(统计的是左表存在的玩家记录),COALESCE把SUM(null)转换成了0
这样就能完整保留所有玩家的记录啦~
内容的提问来源于stack exchange,提问作者krzakov
相关产品推荐
相关产品推荐

