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

如何使用嵌套SQL查询统计各游戏类别中美国开发者开发的游戏数量(无数据时显示0)

统计各游戏类别中美国开发者开发的游戏数量(含0值)

这是个很常见的统计需求,要保证所有游戏类别都被展示——哪怕该类别没有美国开发者开发的游戏时显示0,核心是要先拿到所有游戏类别,再关联符合条件的开发者数据,而不是只筛选有美国开发者的类别。下面给你两种嵌套SQL的实现方式:

方式一:基于LEFT JOIN的嵌套查询

这种方式先获取所有唯一类别,再左连接筛选后的美国开发者游戏数据,性能相对更优,适合数据量较大的场景:

SELECT 
    g.category,
    COUNT(us_games.gameID) AS usa_developer_game_count
FROM (
    -- 子查询1:获取所有存在的游戏类别(去重)
    SELECT DISTINCT category 
    FROM Game
) g
LEFT JOIN (
    -- 子查询2:筛选出美国开发者开发的所有游戏
    SELECT gameID, category
    FROM Game
    INNER JOIN Developer ON Game.developID = Developer.developerID
    WHERE Developer.country = 'USA' -- 注意匹配数据库中美国的存储值,比如可能是'United States'
) us_games ON g.category = us_games.category
GROUP BY g.category
ORDER BY g.category;

逻辑说明:

  • 第一个子查询确保我们不会遗漏任何游戏类别,哪怕该类别下没有符合条件的游戏;
  • 第二个子查询提前过滤出所有由美国开发者开发的游戏数据;
  • LEFT JOIN会保留所有类别,没有匹配的类别对应us_games.gameID为NULL,COUNT(us_games.gameID)会自动忽略NULL值,从而得到0;
  • 最后按类别分组统计,得到每个类别的对应数量。

方式二:基于标量子查询的实现

这种方式更直观,外层遍历所有类别,每个类别单独执行子查询统计数量,适合快速理解逻辑:

SELECT 
    DISTINCT g.category,
    -- 子查询:统计当前类别下美国开发者开发的游戏数量
    (
        SELECT COUNT(*)
        FROM Game g2
        INNER JOIN Developer d ON g2.developID = d.developerID
        WHERE d.country = 'USA' AND g2.category = g.category
    ) AS usa_developer_game_count
FROM Game g
ORDER BY g.category;

逻辑说明:

  • 外层查询先获取所有唯一的游戏类别;
  • 对每个类别,执行嵌套的子查询:统计该类别下关联到美国开发者的游戏数量,没有符合条件的游戏时,子查询会返回0;
  • 最终直接输出每个类别及其对应的统计数。

注意:如果你的数据库中美国的存储值不是'USA'(比如是'United States'),记得修改WHERE条件中的对应值,确保匹配正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:03:09