对于 SQL,如何使用 group by 两次但仅在第二组中按 sum() 排序

For SQL, how to use group by twice but only order by sum() within the 2nd group

table 记录信用卡交易,其中每一行是一条记录。

列为:transaction_id、customerID、dollar_spent、product_category。

如何从每个 product_category 中挑选出该类别中 dollar_spent 最高的 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) 排序

在 Whosebug 上搜索但未找到任何相关内容。有人可以帮我吗?非常感谢!!

我认为您要查找的是窗口函数。

我将 row_number 功能添加到您的 select 按花费金额排序,这基本上按产品对客户支出进行排名。

然后因为你不能在 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