簡體   English   中英

找到最流行的組合 SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM