sql - 在 oracle 中对列进行排序而不进行排序

标签 sql oracle rank analytic-functions

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

来自查询的数据:

Rid   id

8100  161
8101   2
8102   2
8103   2
8104  156

当我按 id 按顺序应用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

最佳答案

我从这里调整了解决方案:DENSE_RANK according to particular order为您的需要。

我不确定是否应该将其标记为重复,因为在上面的这个链接上没有 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

DEMO

关于sql - 在 oracle 中对列进行排序而不进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546671/

相关文章:

sql - 如何使用有序查询的结果调用函数

sql - 如何在 SQL 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现

database - Oracle ctxcat.context 包含在某些搜索参数上表现出奇怪的行为

java - 使用java从一个oracle数据库中选择并批量插入到另一个oracle数据库中

sql - 如何从平面表中提取层次结构?

PHP/MySQL - 内连接排名

sql - 如何在不重新输入字段名称的情况下比较字段的修剪长度和未修剪长度?

sql - 我如何构造我的数据库,以便构成相同 "element"的两个表链接到另一个?

mysql - 给出 mysql 数据库列排名

python - 基础 Python : Rank items in list