我有一個如下所示的資料集:
| 交易編號 | store_id | 產品編號 | 產品名稱 |
|---|---|---|---|
| 1 | 100 | p001 | 產品_1 |
| 1 | 100 | p002 | 產品_2 |
| 1 | 100 | p003 | 產品_3 |
| 4 | 100 | p002 | 產品_2 |
| 4 | 100 | p003 | 產品_3 |
| 5 | 100 | p002 | 產品_2 |
| 5 | 100 | p003 | 產品_3 |
| 7 | 100 | p001 | 產品_1 |
| 7 | 100 | p003 | 產品_3 |
| 8 | 101 | p002 | 產品_2 |
| 8 | 101 | p003 | 產品_3 |
| 9 | 101 | p001 | 產品_1 |
| 9 | 101 | p002 | 產品_2 |
| 2 | 101 | p001 | 產品_1 |
| 3 | 101 | p002 | 產品_2 |
| 3 | 101 | p003 | 產品_3 |
| 6 | 101 | p001 | 產品_1 |
| 6 | 101 | p002 | 產品_2 |
我試圖找到一個查詢來提供如下輸出。
| 店鋪 | freq_prod_ids | count_of_transactions |
|---|---|---|
| 100 | p002, p003 | 3 |
| 100 | p001, p003 | 2 |
| 101 | p001, p002 | 2 |
| 101 | p002, p003 | 2 |
這基本上應該給出每家商店在單次交易中最常購買的前 2 個 [N=2] 產品組合。
請幫助進行 SQL 查詢以獲取此回應。
uj5u.com熱心網友回復:
您可以嘗試以下方法,在基于商店和產品對進行聚合之前執行自聯接。所述row_number用于檢索每個店鋪的頂部2產品對。
SELECT
store_id, freq_prod_ids,count_of_transactions
FROM (
SELECT
t1.store_id,
CONCAT(t1.product_id,', ',t2.product_id) as freq_prod_ids,
COUNT(1) as count_of_transactions,
ROW_NUMBER() OVER (PARTITION BY t1.store_id ORDER BY COUNT(1) DESC) as rn
FROM my_table t1
INNER JOIN my_table t2 on t1.store_id = t2.store_id and
t1.product_id < t2.product_id and
t1.transaction_id = t2.transaction_id
GROUP BY t1.store_id,CONCAT(t1.product_id,', ',t2.product_id)
) t3 WHERE rn <=2
查看作業演示資料庫小提琴
讓我知道這是否適合您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327401.html
標籤:sql sql-server sql-server-2008
上一篇:樣式化單選按鈕打破了功能
