该表记录信用卡交易,其中每一行都是一条记录。
这些列是:transaction_id、customerID、dollar_spent、product_category。
如何从每个 Product_category 中选取该类别中 Dollar_spent 最高的 3 个 customerID?
我在想这样的事情:
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 上搜索但没有找到任何相关内容。有人可以帮我解决这个问题吗?非常感谢!!
最佳答案
我认为您正在寻找的是窗口函数。
我将 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
这是一个fiddle
关于sql - 对于 SQL,如何使用 group by 两次但仅在第二组内按 sum() 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69741980/