分组但不是数字指标 - Oracle

时间:2018-03-28 15:52:23

标签: sql oracle

我在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中实现这一点的任何想法?

提前致谢!

1 个答案:

答案 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