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

如何统计同时参与两个ObjectID的唯一用户数?现有SQL无结果排查

问题分析与解决

原SQL的错误点

  • JOIN语法错误:LEFT JOIN后面缺少ON关键字,正确的关联语法应该是LEFT JOIN Engagements ON Engagements.UserID = Users.UserID
  • 条件逻辑错误:你要筛选的是ObjectID为10和11的记录,但误写成了UserID;同时,同一行的字段不可能同时等于两个不同值(Engagements.UserID = '10' AND Engagements.UserID = '11'),这直接导致查询无结果。

正确的SQL写法

写法一:分组统计法(推荐)

这种方式通过分组筛选出同时关联两个ObjectID的用户,还能直接统计数量:

-- 查看符合条件的用户ID
SELECT u.UserID
FROM Users u
INNER JOIN Engagements e ON e.UserID = u.UserID
WHERE e.ObjectID IN (10, 11)
GROUP BY u.UserID
HAVING COUNT(DISTINCT e.ObjectID) = 2;

-- 统计符合条件的用户数量
SELECT COUNT(DISTINCT u.UserID) AS TargetUserCount
FROM Users u
INNER JOIN Engagements e ON e.UserID = u.UserID
WHERE e.ObjectID IN (10, 11)
GROUP BY u.UserID
HAVING COUNT(DISTINCT e.ObjectID) = 2;

逻辑说明:先关联用户表和互动表,筛选出互动对象为10或11的记录;按用户ID分组后,统计每个用户关联的不同ObjectID数量,只有数量等于2的用户才是同时和两个对象互动的。

写法二:EXISTS子查询法

通过两次子查询验证用户是否同时存在两个互动记录:

-- 查看符合条件的用户ID
SELECT DISTINCT u.UserID
FROM Users u
WHERE EXISTS (
    SELECT 1 FROM Engagements e1 
    WHERE e1.UserID = u.UserID AND e1.ObjectID = 10
)
AND EXISTS (
    SELECT 1 FROM Engagements e2 
    WHERE e2.UserID = u.UserID AND e2.ObjectID = 11
);

-- 统计符合条件的用户数量
SELECT COUNT(DISTINCT u.UserID) AS TargetUserCount
FROM Users u
WHERE EXISTS (
    SELECT 1 FROM Engagements e1 
    WHERE e1.UserID = u.UserID AND e1.ObjectID = 10
)
AND EXISTS (
    SELECT 1 FROM Engagements e2 
    WHERE e2.UserID = u.UserID AND e2.ObjectID = 11
);

逻辑说明:分别检查用户是否存在和ObjectID=10、ObjectID=11的互动记录,同时满足两个条件的用户即为目标用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:42:50