场景
数据库查询中,很多时候都会遇到对数据进行分组,然后组内排序加序号的需求。应用
对于组内排序一般有三个函数可供使用,它们是RANK()、DENSE_RANK()以及ROW_NUMBER()。它们都是对分过组的数据排序加序号,不过又有各自的区别。
语法
它们的语法是一样的,如下:
- ROW_NUMBER()OVER([PARTITIONBYcol1]ORDERBYcol2)
- DENSE_RANK()OVER([PARTITIONBYcol2)
- RANK()OVER([PARTITIONBYcol2)
区别 三个函数都是按照col1分组内从1开始排序
其中,ROW_NUMBER() 是没有重复值的排序(即使两条记录相同,序号也不重复的),不会有同名次。
DENSE_RANK() 是连续的排序,两个第二名仍然跟着第三名。
RANK() 是跳跃排序,两个第二名下来就是第四名。
使用 下面用一个例子代码来说明一下区别。在例子中我们对员工工资按部门分组进行排序。注意rank的序号变化。
WITHworkersAS(
Highlighter bg_sql" style="font-family:Consolas,DENSE_RANK()OVER(PARTITION结果如下,相同salaries时,RANK有重复,但连续。
结果如下,相同salaries时,RANK有重复,同时不连续。
结果如下,相同salaries时,RANK有重复,同时不连续。
总之,使用的时候一定要看自己的需要。
原文地址:https://www.jb51.cc/oracle/206343.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。