每组前 N 个(MSSQL)[重复]
Posted
技术标签:
【中文标题】每组前 N 个(MSSQL)[重复]【英文标题】:Top-N per group (MSSQL) [duplicate] 【发布时间】:2020-08-25 02:20:20 【问题描述】:我有 10k - 1m 件商品,这些商品由 product_id
、name
、category
、price
字段描述。从每个类别中获取 10 种最昂贵商品的最快方法是什么?以前我检查了这个答案https://***.com/a/176985/9513268。
我的桌子:
-------------------------------------
|product_id| name | category| price |
-------------------------------------
| 1 |Phone | Gadgets | 599.99|
------------------------------------
| 2 |Jacket| Clothes | 399.00|
-------------------------------------
| ... | ... | ... | ... |
-------------------------------------
【问题讨论】:
那么那里的答案有什么问题?为什么你的尝试没有成功?这感觉就像是那个问题的重复。 @Larnu 我想也许有更快的方法来完成任务。 考虑到您接受的答案与您链接的答案相同,我已将其作为上述答案的副本关闭。 【参考方案1】:您可以使用窗口函数,如您链接的答案所示。
select *
from (
select t.*, rank() over(partition by category order by price desc) rn
from mytable t
) t
where rn <= 10
order by category, rn
关键是要正确定义窗口函数的over()
子句。您想要category
的前 10 名,所以此列转到partition by
;您想要最昂贵的商品,因此order by
的标准按降序排列price
。
您可以单独运行子查询并盯着rn
列以更好地理解逻辑。
【讨论】:
以上是关于每组前 N 个(MSSQL)[重复]的主要内容,如果未能解决你的问题,请参考以下文章