试图从 sqlite 数据库中计算相似用户

Trying to count similar users from sqlite database

我有一个 table 这样的:

user_id | subscription_id
-------------------------
1       | 1
1       | 2
2       | 3
2       | 4
3       | 1
3       | 2
4       | 3
5       | 3

我想做的是统计有多少用户有类似的订阅:

user_id | same_subscriptions
----------------------------
1       | 1
2       | 0
3       | 1
4       | 1
5       | 1

这可能吗?我怎样才能做到这一点...

我做的最好的事情就是用 group_concat:

得到一个像这样的 table
user_id | subscriptions
-----------------------
1       | 1,2
2       | 3,4
3       | 1,2
4       | 3
5       | 3

我是这样实现的:

SELECT A.user_id, group_concat(B.subscription_id) 
  FROM Subscriptions A LEFT JOIN Subscriptions B ON 
  A.user_id=B.user_id GROUP BY A.user_id;

聚合函数 GROUP_CONCAT() 在这种情况下没有帮助,因为在 SQLite 中它不支持 ORDER BY 子句,因此可以进行安全比较。
但是您可以使用 GROUP_CONCAT() window 函数代替:

SELECT user_id, 
       COUNT(*) OVER (PARTITION BY subs) - 1 same_subscriptions
FROM (
  SELECT user_id, 
    GROUP_CONCAT(subscription_id) OVER (PARTITION BY user_id ORDER BY subscription_id) subs,
    ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY subscription_id DESC) rn
  FROM Subscriptions
)
WHERE rn = 1
ORDER BY user_id

参见demo
结果:

> user_id | same_subscriptions
> ------: | -----------------:
>       1 |                  1
>       2 |                  0
>       3 |                  1
>       4 |                  1
>       5 |                  1