[英]SQL get count of distinct user types in one row per date
我有一個國家列表,對於每個國家我都有一個這樣的表(第一列: user
,第二列: user_type
,第三列: date
):
用戶 | 用戶類型 | 日期 |
---|---|---|
用戶1 | 國家的 | 2022-10-01 |
用戶1 | 國家的 | 2022-10-01 |
用戶2 | 國家的 | 2022-10-01 |
用戶2 | 國際的 | 2022-10-01 |
用戶3 | 國家的 | 2022-10-02 |
用戶1 | 未知 | 2022-10-02 |
用戶1 | 國家的 | 2022-10-03 |
我想每天一行獲取每種類型的所有不同用戶,如下所示(4 列:日期、first_user_type、second_user_type、third_user_type):
日期 | first_user_type | second_user_type | 第三用戶類型 |
---|---|---|---|
2022-10-01 | 2個 | 1個 | 0 |
2022-10-02 | 1個 | 0 | 1個 |
2022-10-03 | 1個 | 0 | 0 |
但是,如果我運行此查詢:
SELECT
date, user_type, COUNT(distinct user) as num_users
FROM "country"."table"
WHERE
date between '2022-10-01' AND '2022-10-03'
GROUP BY date, user_type
ORDER BY date, user_type
然后我獲得了正確的結果,但在不同的行中具有相同的日期,如下所示:
日期 | 用戶類型 | 用戶數 |
---|---|---|
2022-10-01 | 國家的 | 2個 |
2022-10-01 | 國際的 | 1個 |
2022-10-01 | 未知 | 0 |
2022-10-02 | 國家的 | 1個 |
2022-10-02 | 國際的 | 0 |
2022-10-02 | 未知 | 1個 |
2022-10-03 | 國家的 | 1個 |
2022-10-03 | 國際的 | 0 |
2022-10-03 | 未知 | 0 |
但是還有一個額外的難點:全球有3種user_types
:“National”、“International”和“Unknown”,但問題是有些國家只有“National”,或者“National”和“Unknown”(沒有“International” "),並且我希望結果顯示為 0(即使該user_type
在該國家/地區不存在)。 所有國家的查詢都應該相同,只是更改“ country
”。
(PS:查詢應該在 AWS Athena 中運行)
有任何想法嗎?
條件聚合應該在這里做:
SELECT date_,
COUNT(DISTINCT IF(user_type = 'National' , user_, NULL)) AS numNational,
COUNT(DISTINCT IF(user_type = 'International', user_, NULL)) AS numInternational,
COUNT(DISTINCT IF(user_type = 'Unknown' , user_, NULL)) AS numUnknown
FROM tab
GROUP BY date_
在此處查看演示。
SELECT date,
SUM(CASE WHEN user_type = 'National' THEN 1 ELSE 0 END) AS National,
SUM(CASE WHEN user_type = 'International' THEN 1 ELSE 0 END) AS International,
SUM(CASE WHEN user_type = 'Unknown' THEN 1 ELSE 0 END) AS Unknown
FROM "country"."table"
WHERE date BETWEEN '2022-10-01' AND '2022-10-03'
GROUP BY date
我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.