首页 > 解决方案 > 订单数据 - 重叠的用户 ID

问题描述

我有一个用户 ID 列表,每个订单都有一行,提供订单 ID 和订单平台。

我想了解

  1. 仅在 1 个平台上购物的唯一用户数,
  2. 在应用程序和其他平台之一(网络移动或网络桌面)上购物的唯一用户数量也是如此。

我只设法按用户获取平台总数,但我想了解用户在平台上的重叠位置。

我希望有人可以为我指明这个方向。

样本数据:

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

标签: postgresql

解决方案


演示:db<>小提琴

只有一个平台的所有用户:

SELECT
    user_id
FROM
    t
GROUP BY user_id
HAVING COUNT(DISTINCT platform) = 1

拥有平台的所有用户App以及至少一个以上用户:

  1. 聚合所有不同的平台

  2. 检查是否包含应用程序

  3. 检查数组是否包含超过 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
    

推荐阅读