对于 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
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