我在Oracle中有以下表格:
category group lift
Apples Lemons 8
Apples Oranges 7
Apples Bananas 9
Apples Watermelon 7.5
Oranges Pineapple 6
Oranges Apples 2.5
Oranges Lemons 4
Oranges Strawberries 5.5
在现实生活中,类别字段包含太多的苹果和橘子行。我想要做的是选择与每个类别的最大升降机相对应的不同类别和前3个组(组字段)。像这样:
category group lift
Apples Bananas 9
Apples Lemons 8
Apples Watermelon 7.5
Oranges Pineapple 6
Oranges Strawberries 5.5
Oranges Lemons 4
如您所见,我想做一种“分组依据”,但没有任何数字指标。我只想根据电梯订单选择每个类别的前三组。
关于如何在Oracle中实现这一点的任何想法?
提前致谢!
答案 0 :(得分:1)
您必须了解dense_rank()的工作原理。如果您在顶部范围内具有相等的值,例如:9,8,7,7,6:此选择返回4个顶行(9,8,7,7)。
select FCATEGORY, FGROUP, FLIFT from (
select f.*, dense_rank() over ( partition by f.FCATEGORY order by f.FLIFT desc ) rnk
from fruits f )
where rnk <= 3