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より小さい組合わせのみを選択するようにしてます。


