[英]Find the most popular combinations SQL
我有 2 個表我想加入以探索最受歡迎的位置組合,按不同的 ID,按計數排序。 我從 l 獲得位置,從 d 獲得日期。 此連接的結果將是:
id loc_id location date
1 111 NYC 20200101
1 222 LA 20200102
2 111 NYC 20200103
2 333 LON 20200103
3 444 NYC 20200105
4 444 LA 20200106
4 555 PAR 20200107
5 111 NYC 20200110
5 222 LA 20200111
如果可能,我想使用 STRING_AGG,但 WITHIN 語句出錯 -
'期待')'但在里面
..(我為此使用 BigQuery)。 這是我到目前為止所嘗試的。
SELECT t.combination, count(*) count
FROM (
SELECT
STRING_AGG(location, ',') WITHIN GROUP (ORDER BY d.date) combination
FROM location as l
JOIN date d
USING (loc_id)
GROUP BY id
) t
WHERE date BETWEEN 20190101 AND 20200228 GROUP BY t.combination
ORDER BY count DESC;
我想最終得到類似的東西:
combination count
NYC, LA 3
NYC, LON 1
LA, PAR 1
NYC 1
如果有另一種方法,我很樂意從 string_agg 更改。
正確的 BQ 語法是:
SELECT t.combination, count(*) count
FROM (SELECT STRING_AGG(location, ',' ORDER BY d.date) as combination
FROM location l JOIN
date d
USING (loc_id)
GROUP BY id
) t
WHERE date BETWEEN 20190101 AND 20200228
GROUP BY t.combination
ORDER BY count DESC;
請注意,您的JOIN
條件看起來仍然是錯誤的。
如果您使用日期,那么我會期望DATE
常量。
而且您的日期過濾代碼在外部查詢中不起作用,因為您沒有在內部查詢中選擇日期。 您可能希望在內部查詢中進行過濾。
這個答案沒有解決這些問題。
BigQuery 有很好的文檔。 STRING_AGG()
沒有WITHIN GROUP
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.