如何按分组统计含特定值的元组数量?——SQL查询中显示无符合条件数据的分组结果
如何显示所有游戏类别(含无美国开发者的类别)的统计数
嘿,你的问题根源在于用了内连接(INNER JOIN)——这种连接只会返回两个表中完全匹配的记录,所以那些没有美国开发者的游戏类别直接被过滤掉了。要实现显示所有类别,哪怕对应数量是0,我们需要调整连接方式和条件位置,具体修改如下:
修正后的SQL查询
SELECT g.category, COALESCE(COUNT(d.developerID), 0) AS TotalGames FROM Game g LEFT JOIN Developer d ON g.developID = d.developerID AND d.country = 'America' -- 把国家条件放在JOIN里,而非WHERE GROUP BY g.category;
关键细节解释
- 左连接(LEFT JOIN):以
Game表为核心,保留所有游戏类别记录。即使某个类别里没有美国开发者开发的游戏,这条类别记录依然会被保留,只是关联的开发者字段会是NULL。 - 条件移至JOIN子句:如果把
country = 'America'放在WHERE里,左连接产生的NULL记录会被过滤掉,等于又变回了内连接的效果。把条件放在JOIN的关联条件中,只会筛选出美国开发者的匹配项,不匹配的类别记录依然保留。 - COALESCE处理空值:当没有匹配的美国开发者时,
COUNT(d.developerID)本身就会返回0(因为COUNT会忽略NULL值),不过加上COALESCE可以明确把潜在的NULL转为0,让结果的意图更直观。
如果你想更简洁,也可以去掉COALESCE,直接用COUNT(d.developerID),最终结果是一致的。
内容的提问来源于stack exchange,提问作者Bilal Sheikh
相关产品推荐
相关产品推荐

