該表記錄信用卡交易,其中每一行是一條記錄。
列是:transaction_id、customerID、dollar_spent、product_category。
我如何從每個 product_category 中提取該類別中美元支出最高的 3 個客戶 ID?
我在想這樣的事情:
select product_category, customerID, sum(dollar_spent)
from transaction
group by product_category, customerID
order by sum(dollar_spent) desc limit 3
但它沒有通過。洗掉“限制 3”有助于它通過,但整個結果僅按 sum(dollar_spent) 排序,而不是按每個 product_category 中的 sum(dollar_spent) 排序。
在 StackOverflow 上搜索,但沒有找到任何相關內容。有人可以幫我解決這個問題嗎?非常感謝!!
uj5u.com熱心網友回復:
我認為您正在尋找的是一個視窗函式。
我將該row_number功能添加到您按花費金額排序的選擇中,這基本上按產品對客戶支出進行了排名。
然后因為你不能在 where 子句中使用視窗函式(不幸的是)我不得不創建一個外部查詢來過濾row_number結果
select * from(
select product_category, customerID, sum(dollar_spent),
row_number() over (partition by product_category order by sum(dollar_spent) desc) as rowNum
from transaction
group by product_category, customerID
) as data
where rowNum <= 3
order by product_category, rowNum
這是一把小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/338969.html
