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

如何编写SQL查询统计同时注册两款游戏的用户数量?

嘿,别发愁!这种统计需求太常见了,但得先摸清楚你的数据库表结构才行。我先给你拆解下最常见的几种表结构场景,再给你对应的SQL写法,你可以对照自己的实际情况调整。

第一步:先搞清楚你的表结构(这是核心!)

最常见的两种存储用户游戏注册数据的方式:

  • 场景1:单表存所有注册记录:比如有一张user_game_registrations表,每一行代表一个用户注册一款游戏的记录,字段通常会有user_id(用户唯一标识)、game_id(游戏唯一标识,比如游戏A是1,游戏B是2)、registration_time(注册时间)这类。
  • 场景2:用户表带游戏注册标记:比如users表里直接有registered_game_a、registered_game_b这样的布尔字段(TRUE表示已注册),这种结构相对少见,但也存在。
第二步:对应场景的SQL写法

针对场景1(单表存所有注册记录)

假设你要统计同时注册了game_id=1和game_id=2的用户数,有两种常用写法:

写法1:分组+HAVING筛选(推荐,逻辑清晰)

SELECT COUNT(DISTINCT user_id) AS co_registered_users
FROM user_game_registrations
WHERE game_id IN (1, 2) -- 只筛选这两款游戏的注册记录
GROUP BY user_id
HAVING COUNT(DISTINCT game_id) = 2; -- 确保用户同时注册了两款游戏

逻辑解释:先过滤出两款游戏的所有注册数据,按用户分组后,只保留分组内包含2个不同游戏ID的用户(也就是同时注册了两款的),最后统计这些用户的数量。

写法2:自连接查询

SELECT COUNT(DISTINCT u1.user_id) AS co_registered_users
FROM user_game_registrations u1
JOIN user_game_registrations u2 
  ON u1.user_id = u2.user_id
WHERE u1.game_id = 1 
  AND u2.game_id = 2;

逻辑解释:把表和自己连接,找到既存在游戏1注册记录、又存在游戏2注册记录的用户,最后去重统计数量。

针对场景2(用户表带注册标记)

这种情况就简单多了,直接筛选两个标记都为真的用户:

SELECT COUNT(user_id) AS co_registered_users
FROM users
WHERE registered_game_a = TRUE 
  AND registered_game_b = TRUE;
第三步:如果不确定表结构怎么办?

你可以先查看表的字段信息,不同数据库的命令略有不同:

  • MySQL/MariaDB:DESCRIBE user_game_registrations;(把表名换成你的实际表名)
  • PostgreSQL:\d user_game_registrations;
  • SQL Server:sp_help 'user_game_registrations';

执行这些命令后,你就能清楚看到表中有哪些字段,再对应上面的写法调整就行啦!

内容的提问来源于stack exchange,提问作者E.GibSaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:22