左连接查询求和时无数据行丢失,如何显示为0?
左连接聚合后无资产玩家不显示的解决方法
问题根源
问题出在缺少GROUP BY分组子句,而非ON子句过滤数据。当使用SUM()或TOTAL()这类聚合函数时,若未指定分组规则,SQL会将整个查询结果合并为一个分组计算,最终只返回一行汇总结果——这就导致无资产的bar玩家被“合并消失”了,因为它对应的amount是NULL,不会单独形成一行结果。
修正后的查询语句
通过添加GROUP BY按玩家维度分组,再配合COALESCE将聚合后的NULL值转为0,就能让无资产的玩家正常显示0资产:
SELECT players.nickname, COALESCE(TOTAL(possessions.amount), 0) AS total_amount FROM players LEFT JOIN possessions ON possessions.player_id = players.id GROUP BY players.id, players.nickname
关键说明
GROUP BY players.id, players.nickname:按每个玩家的唯一ID和昵称分组,保证每个玩家的资产被单独计算,不会被合并COALESCE(TOTAL(possessions.amount), 0):当玩家没有关联的资产记录时,TOTAL()返回NULL,COALESCE会将这个NULL替换为0,满足显示需求
内容的提问来源于stack exchange,提问作者Basti
相关产品推荐
相关产品推荐

