【问题标题】:Queries to fetch items based on top Ranks根据最高排名获取项目的查询
【发布时间】:2013-10-29 01:22:43
【问题描述】:

我有一个表格,可以对我拥有的项目进行排名。

我需要一个查询,它只获取给定项目的前 2 个排名,排名可能不是按顺序排列的。

我需要获取至少有两个等级的项目,两个项目也将具有相同的等级。

这是我桌子的快照。

Item Id Supp Id Rank
1   2   2
1   1   7
1   7   5
1   9   11
2   67  4
2   9   14
2   10  14
2   34  4
2   25  3
2   60  3
2   79  5

我的要求是如果我输入 2 我应该得到如下结果

Item Id Supp_id Rank
2   25  3
2   60  3
2   67  4
2   34  4

我使用的是 oracle 10g 版本。

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    作为其中一种方法,它可以如下完成。在这里,我们使用dense_rank() over() 分析函数为按rank 行组排序的行分配排名。

    select t.item_id
         , t.supp_id
         , t.rank
      from (select item_id
                 , supp_id
                 , rank
                 , dense_rank() over(partition by item_id 
                                         order by rank) as rn
              from t1
              where item_id = 2 
             ) t
    where t.rn <= 2
    

    结果:

       ITEM_ID    SUPP_ID       RANK
    ---------- ---------- ----------
             2         25          3 
             2         60          3 
             2         67          4 
             2         34          4 
    

    SQLFiddle Demo

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2022-01-11
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多