sql - 在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
解决方案
我已经从这里调整了解决方案: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
推荐阅读
- mysql - x-devapi 无法连接到 Google 应用引擎中的数据库
- tensorflow - 如何在 GitLab 上使用 TensorFlow 和 OpenAI gym 为 Python 项目的 CI/CD 设置基本的 .gitlab-ci.yml 文件?
- java - Java : Android : Retrofit 2 响应代码为 200,response.body 为空
- cloudkit - 邀请 CKShare 并在没有 UICloudSharingController 且不发送 URL 链接的情况下接受 CKShare
- python - Statsmodels.formula.api OLS 不显示截距的统计值
- python - pip Virtualenv 与项目中的目录
- java - 在我的动态 Web 项目中运行 Tomcat 服务器时出错
- c++ - C++ 17 中 Clang 的不明确部分特化
- kubernetes - 如何将 OpenStack 卷附加到 Kubernetes 静态 Pod?
- android - Android Studio 空属性窗口