对于支持分析功能窗口功能的任何数据库,这都相对容易
select * from (select type, variety, price, rank() over ([partition by something] order by price) rnk from fruits) rank_subquery where rnk <= 3
如果您省略,则将
[partition bysomething]获得总体排名前三的行。如果您希望每个都排在前三位
type,则可以使用
partition by type该
rank()函数。
根据您想要处理领带的方式,可能要使用
dense_rank()或
row_number()而不是
rank()。如果两行使用并列
rank,则下一行将具有
rnk3的值,而下一行将具有
rnk2的值
dense_rank。在这两种情况下,两个绑定行的a
rnk均为1。
row_number任意将两个绑定行a的a设为
rnk1,将另一个a
rnk设为2。



