首页 > 解决方案 > 在oracle中对没有排序的列进行排名

问题描述

我有如下数据,当我通过排序 id 列应用 dense_rank 时,我根据整数的顺序获得排名,但我需要在运行查询时显示记录时进行排名:

来自查询的数据:

Rid   id

8100  161
8101   2
8102   2
8103   2
8104  156

当我通过 id 对 order 应用 dense_rank 时,我得到了

Rid   id    rank

8100  161    3
8101   2     1
8102   2     1
8103   2     1
8104  156    2

但我的要求是进入以下方式:

Rid   id    rank

8100  161    1
8101   2     2
8102   2     2
8103   2     2
8104  156    3

也使用了 row_number 但结果不如预期,不确定哪个选项会更好。

任何帮助表示赞赏。

谢谢

编辑 - - - - - - - - - - - - - - -

使用的查询

Select rid, id,dense_rank() over (order by id) row_num
from table

标签: sqloraclerankanalytic-functions

解决方案


我已经从这里调整了解决方案:DENSE_RANK 根据您需要的特定顺序。

我不确定是否应该将其标记为重复,因为在上面的这个链接上没有 ORACLE 标记。如果更多有经验的成员认为我应该发表评论,我会这样做并删除此答案。

这是调整后的代码和演示:

SELECT t2.rid
       , t2.id
       , DENSE_RANK() OVER (ORDER BY t2.max_rid)
FROM (
  SELECT MAX(t1.rid) OVER (PARTITION BY t1.grupa) AS max_rid
         , t1.rid
         , t1.id
  FROM (       
    SELECT rid
           , id
           ,ROW_NUMBER() OVER (ORDER BY rid) - ROW_NUMBER() OVER (PARTITION BY id ORDER BY rid) AS grupa
    FROM test_table) t1 )  t2
ORDER BY rid

演示


推荐阅读