WITH pairs AS ( SELECT a1.productId AS productId_1, a2.productId AS productId_2, COUNT(*) AS cnt FROM dataset.table AS a1 JOIN dataset.table AS a2 ON a1.userId = a2.userId WHERE a1.productId < a2.productId GROUP BY 1, 2 ) SELECT * FROM pairs ORDER BY 3 DESC;
1つのテーブルから、同一userIdで複数のproductIdを購入している。といった組合わせ件数を抽出するクエリ
→ アソシエーション分析などをする場合のベースレコード作成用。
集計のポイントとして、13-14行目のWHERE句の部分で、レコードが重複集計されるのを避けるためにproductId_1がproductId_2より小さい組合わせのみを選択するようにしてます。