postgresql - 订单数据 - 重叠的用户 ID
问题描述
我有一个用户 ID 列表,每个订单都有一行,提供订单 ID 和订单平台。
我想了解
- 仅在 1 个平台上购物的唯一用户数,
- 在应用程序和其他平台之一(网络移动或网络桌面)上购物的唯一用户数量也是如此。
我只设法按用户获取平台总数,但我想了解用户在平台上的重叠位置。
我希望有人可以为我指明这个方向。
样本数据:
User ID Order no Platform
1 12 App
2 123 Web - Mobile
2 234 App
3 345 Web - Mobile
5 456 App
5 567 Web - Desktop
5 678 Web - Mobile
5 780 App
6 789 Web
6 900 App
7 1011 Web - Mobile
7 1122 Web - Desktop
解决方案
只有一个平台的所有用户:
SELECT
user_id
FROM
t
GROUP BY user_id
HAVING COUNT(DISTINCT platform) = 1
拥有平台的所有用户App
以及至少一个以上用户:
聚合所有不同的平台
检查是否包含应用程序
检查数组是否包含超过 1 个元素
SELECT * FROM ( SELECT user_id, ARRAY_AGG(DISTINCT platform) platforms -- 1 FROM t GROUP BY user_id ) s WHERE platforms && '{App}' -- 2 AND cardinality(platforms) >= 2 -- 3