文档章节

Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK简析

源-代码
 源-代码
发布于 2016/06/24 19:43
字数 405
阅读 51
收藏 2
这三个函数都是排序函数,那么有什么不同呢,下面看个例子:
SQL> select empno,
  2         ename,
  3         deptno,
  4         sal,
  5         row_number() over(partition by deptno order by sal) sql_rownum,
  6         rank() over(partition by deptno order by sal) sql_rank,
  7         dense_rank() over(partition by deptno order by sal) as sal_denserank
  8    from emp;
EMPNO ENAME          DEPTNO        SAL SQL_ROWNUM   SQL_RANK SAL_DENSERANK
---------- ---------- ---------- ---------- ---------- ---------- -------------
      7934 MILLER             10       1300          1          1             1
      7782 CLARK              10       2450          2          2             2
      7839 KING               10       5000          3          3             3
      7369 SMITH              20        800          1          1             1
      7566 JONES              20       2975          2          2             2
      7902 FORD               20       3000          3          3             3
      7900 JAMES              30        950          1          1             1
      7521 WARD               30       1250          2          2             2
      7654 MARTIN             30       1250          3          2             2
      7844 TURNER             30       1500          4          4             3
      7499 ALLEN              30       1600          5          5             4
      7698 BLAKE              30       2850          6          6             5
已选择12行。
上面SQL中,这三个函数都采用deptno列进行分组,以列sal进行升序排序。
我们看empno为7900-7698的行。在相同分组和相同字段相同顺序排序的情况下:row_number函数只是单纯的返回行排序后的序号;rank函数在sal相同时,采用相同的行号,但是之后的行会继续按单纯的排序号继续编号;
dense_rank返回在结果,会在sal相同时采用相同的排序号,但是之后按上面的序号继续排序。
也就是我们通过说rank会跳号,dense_rank不会跳号。

本文转载自:http://www.cnblogs.com/zhaoshuangshuang/archive/2013/08/22/3275525.html

共有 人打赏支持
源-代码
粉丝 10
博文 9
码字总数 3999
作品 0
西安
后端工程师
私信 提问
Oracle开窗函数笔记及应用场景

介绍Oracle的开窗函数之前先介绍一下分析函数,因为开窗函数也属于分析函数 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返...

smileNicky
2018/12/30
0
0
oracle分析函数Rank, Dense_rank, row_number

一、使用rownum为记录排名: 在前面一篇《Oracle开发专题之:分析函数》,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题: ①对所有客户按订单总额进行排名 ②按区域和客户订...

Hyacinth_Yuan
2015/12/25
154
0
oracle的分析函数‘over’

分析函数语法: 例: sum(sal) over (partition by deptno order by ename) new_alias sum就是函数名 (sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm) over...

0o清风徐来o0
2012/10/22
0
0
oracle 函数之分析函数

1.分析函数有4个 over rownumber denserank rank 四个 不能单独使用2.select empno, sal ,deptno,sum(sal) over(order by empno) , sum(sal) over() from emp; 视图如下 按照工资进行累加3 s......

天使不凡
2017/12/30
0
0
mysql8.0窗口函数:rank,dense_rank,row_number 使用上的区别

本节主要介绍排序类 rank,denserank,rownumber使用上的区别 RANK:跳跃排序 DENSERANK:连续排序 rownumber:没有重复值的排序[记录相等也是不重复的]可以进行分页使用。 案例: rank :跳跃式...

jingjing.wang
2018/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部