首页 > 解决方案 > SQL 根据列字符串值计算不同的用户 ID

问题描述

我正在尝试创建一个新的数据表,该表在两个单独的列中包含每周的用户总数,来自Platform = 'Web'的不同用户的计数和来自Platform = 'iOS' 或 'Android'的不同用户的计数

我在下面的尝试没有奏效。有人可以建议吗?

数据源:

DATE     USER_ID  Platform
1/1/2020  1223    Web
1/2/2020  2032    iOS
1/3/2020  2432    Android
1/4/2020  20311   iOS
1/4/2020  2443    Android
  

SQL 尝试

SELECT DATE_TRUNC(week, d.DATE)  as DATE,
           COUNT(DISTINCT d.USER_ID WHERE d.PLATFORM = 'Web') AS USER_COUNT_WEB,
           COUNT(DISTINCT d.USER_ID WHERE d.PLATFORM = 'Android' OR 'iOS') AS USER_COUNT_PHONE
    FROM data d
    GROUP BY 1;

目标表:

DATE     User_Count_Web  User_count_Phone
1/1/2020  12              230
1/8/2020  20              442
1/15/2020 24              533

标签: snowflake-cloud-data-platform

解决方案


这是一种方法:

SELECT
    DATE_TRUNC(week, d.DATE) as DATE,
    COUNT(DISTINCT case when d.PLATFORM = 'Web' then d.USER_ID end) AS USER_COUNT_WEB,
    COUNT(DISTINCT case when d.PLATFORM in ('Android','iOS') then d.USER_ID end) AS USER_COUNT_PHONE
FROM data d
GROUP BY 1;

推荐阅读