甲骨文设置:
CREATE TABLE data (User_ID, Activity_ID) AS
SELECT 123, 222 FROM DUAL UNION ALL
SELECT 123, 333 FROM DUAL UNION ALL
SELECT 124, 222 FROM DUAL UNION ALL
SELECT 124, 224 FROM DUAL UNION ALL
SELECT 124, 333 FROM DUAL UNION ALL
SELECT 125, 224 FROM DUAL UNION ALL
SELECT 125, 333 FROM DUAL;
CREATE TYPE INTLIST AS TABLE OF INT;
/
查询:
WITH Activities (User_IDs, Activity_ID) AS (
SELECT CAST(COLLECT(User_ID) AS INTLIST),
Activity_ID
FROM data
GROUP BY Activity_ID
)
SELECT a.Activity_ID,
b.Activity_ID,
CARDINALITY(a.User_IDs MULTISET INTERSECT b.User_IDs) AS "Count"
FROM Activities a
INNER JOIN
Activities b
ON (CARDINALITY(a.User_IDs MULTISET INTERSECT b.User_IDs) > 1
AND a.Activity_ID < b.Activity_ID);
输出:
ACTIVITY_ID ACTIVITY_ID Count
----------- ----------- ----------
222 333 2
224 333 2
来源
2016-10-03 21:06:07
MT0
我只看到用户'124'为已经覆盖'的范围内2 22'到'224'。 –
如果某些用户完成了3项活动(相同的3项活动),您希望看到输出结果如何? –
我对活动ID本身不感兴趣。例如,用户123和124都完成了222和333的活动,那么这个组合的用户数应该是2. – datatista