如何编写SQL查询统计bbs表中指定用户关联的唯一交互用户数
实现统计指定用户交互唯一用户数的SQL方案
核心思路是提取所有和目标用户交互的对方ID,去重后计数即可,可参考以下两种通用实现:
方案1:子查询合并去重(兼容所有主流SQL数据库)
SELECT COUNT(*) AS `count` FROM ( SELECT `from_id` AS interact_user FROM `bbs` WHERE `to_id` = ? UNION SELECT `to_id` AS interact_user FROM `bbs` WHERE `from_id` = ? ) AS interact_users
逻辑说明:
- 第一个子查询取出所有给目标用户发消息的用户ID
- 第二个子查询取出所有目标用户发消息给的用户ID
UNION会自动合并两个结果集并去重,外层直接统计行数即可,你给出的示例数据执行后结果正好为3,符合需求。
方案2:单查询分支判断(支持MySQL、PostgreSQL等主流数据库,写法更简洁)
SELECT COUNT(DISTINCT IF(`from_id` = ?, `to_id`, `from_id`) ) AS `count` FROM `bbs` WHERE `to_id` = ? OR `from_id` = ?
逻辑说明:
- 过滤出所有和目标用户相关的行后,通过分支判断取出每一行里和目标用户交互的对方ID
- 直接对所有对方ID去重计数即可,三个参数均传入同一个目标用户ID即可。
内容的提问来源于stack exchange,提问作者Renderer
相关产品推荐
相关产品推荐

