DB2中的ROW_NUMBER() OVER()函数用法
ROW_NUMBER() OVER()大概有俩方面的作用 1,分页, 并返回分页结果集。2,是对数据进行处理 分组
db2的分页:
select tmp.* from (
SELECT rownumber() over() as rowid, ter.EMPLOYEE_NAME as name,ter.EMPLOYEE_NUMBER as misId,a1.ORG_NAME as orgName,a1.ORG_CODE, a1.POSITION_NAME as duty,ter.LEAVE_DATE as leaveDate,abr.CENSOR_NUM as documentNumber FROM
(
SELECT EMPLOYEE_NUMBER, START_DATE,ORG_NAME,ORG_CODE,POSITION_NAME ,row_number()over(partition BY EMPLOYEE_NUMBER ORDER BY START_DATE DESC) AS aaa FROM
EDBADM.T_ODS_EMP_ASSIGN WHERE JOB_NAME != '职员' ) A1 INNER JOIN EDBADM.T_ODS_EMP_TERMINATE ter
ON ter.EMPLOYEE_NUMBER=A1.EMPLOYEE_NUMBER
left join EDBADM.T_ODS_EMP_ABROAD abr
on
abr.EMPLOYEE_NUMBER=A1.EMPLOYEE_NUMBER
WHERE a1.AAA =1 AND char(ter.LEAVE_DATE) = '2011-02-20'
AND ter.EMPLOYEE_NAME LIKE '%杨福辉%'
AND ter.EMPLOYEE_NUMBER ='27004778' )
as tmp where 1=1 AND tmp.rowid >= 1 AND tmp.rowid <=10 order by tmp.leaveDate desc
其中值得注意的是:条件必须放到rownumber 范围内。 这样的话返回的结果才是从1开始。例如吧AND ter.EMPLOYEE_NUMBER ='27004778' 放到tmp 后面则返回的结果集的rowid 直接从其他地方开始。并不是从一开始。这样分页的时候很容易出现,难以发觉的错误。
2:row_number() over()分组排序功能:
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee
02. --------------------------------------
03. 000010 A00 152750 1
04. 000110 A00 66500 2
05. 000120 A00 49250 3
06. 200010 A00 46500 4
07. 200120 A00 39250 5
08. 000020 B01 94250 1
09. 000030 C01 98250 1
10. 000130 C01 73800 2
对查询结果进行排序:(无分组)
当不放条件的时候 返回的结果 从1开始一直到条数最大值
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (ORDER BY salary desc) rank FROM employee
02. --------------------------------------
03. 000010 A00 152750 1
04. 000030 C01 98250 2
05. 000070 D21 96170 3
06. 000020 B01 94250 4
07. 000090 E11 89750 5
08. 000100 E21 86150 6
09. 000050 E01 80175 7
10. 000130 C01 73800 8
11. 000060 D11 72250 9
3:rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
select workdept,salary,rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
02. ------------------
03. A00 39250 1
04. A00 46500 2
05. A00 49250 3
06. A00 66500 4
07. A00 152750 5
08. B01 94250 1
09. C01 68420 1
10. C01 68420 1
11. C01 73800 3
4:dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
select workdept,salary,dense_rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
02. ------------------
03. A00 39250 1
04. A00 46500 2
05. A00 49250 3
06. A00 66500 4
07. A00 152750 5
08. B01 94250 1
09. C01 68420 1
10. C01 68420 1
11. C01 73800 2
12. C01 98250 3
5:---@使用ROW_NUMBER删除重复数据
---假设表TAB中有a,b,c三列,可以使用下列语句删除a,b,c都相同的重复行
DELETE FROM (select year,QUARTER,RESULTS,row_number() over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) AS ROW_NO FROM SALE )
02. WHERE ROW_NO>1
总结:
row_number()over(partition by col1 order bycol2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码。 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。 rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。 oracle 分析函数 row_number(),返回一个整数值(>=1);
DB2中的ROW_NUMBER() OVER()函数用法的更多相关文章
- jquery中attr()与prop()函数用法实例详解(附用法区别)
本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是a ...
- python中enumerate()函数用法
python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by (转)
1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排 ...
- 总结distinct、group by 、row_number()over函数用法及区别
distinct和group by 是一样的,查询去重,只能是全部重复的,也可以理解为针对单例,因为一行有一个字段不一样,他们就会认为这两行内容是不重复的.但是使用row_number()over这个 ...
- matlab中norm与svd函数用法
格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释: NORM Matrix or vector ...
- C++ 中的sort()排序函数用法
sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list.向量排序. 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此 ...
- python中常用内置函数用法总结
强制类型转换:int()float()str()list()tuple()set()dict()总结,这几种类型转换函数得用法基本一致,基本就是int(要转换得数据).返回值类型为对应得数据类型 ...
随机推荐
- android程序打包成APK
1.下载ant(从官网上下载没有bin目录,可以直接在百度上搜APACHE-ANT-1.9.4-BIN.ZIP) 2.解压到C盘根目录(也可以是其他盘) 3.修改环境变量 ANT_HOME C: ...
- Operating System Concepts 项目:生产者-消费者问题 线程
一. 实验目的 实现一个c程序,该程序能模拟解决有限缓冲问题,其中消费者和生产者产生和消耗随机数 二.实验内容 缓冲区 元数据类型为buffer_item,大小为1000的数组,按环形队列处理 生产者 ...
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1
- SharePoint加K2,将Portal系统与BPM系统完美整合!
K2 blackPearl与Microsoft Office SharePoint 一起为解决人员和流程相互合作的解决方案而提供一个强大的平台. K2“blackpearl”根据企业的需求提供了设计, ...
- 在shell脚本中进行条件控制以及使用循环
转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...
- 走进科学之WAF(Web Appllication Firewall)篇
小编P.S:文章非常详尽对WAF领域进行了一次科普,能有让人快速了解当前WAF领域的相关背景及现状,推荐所有WAF领域的同学阅读本文. 1. 前言 当WEB应用越来越为丰富的同时,WEB 服务器以其强 ...
- 5月18日:top10面试算法-LRUcache的实现
问题描述: LRU算法:优先把那些最长时间没使用的对象置换掉.根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. JAVA实现: 测试: publ ...
- Mifare Classic Tool(MCT)汉化版
2.0.4 到 2.0.6的更改: 注意:本汉化版本可能不稳定,与此发生的一切后果与作者和汉化者无关. Version : * Bugfix: Fixed crash which occurred i ...
- RTL2832U+R820电视棒跟踪飞机轨迹教程(ADS-B)
Ubuntu 14.04.3 amd64 apt-get install git apt--dev 安装rtl-sdr git clone git://git.osmocom.org/rtl-sdr. ...
- HDU 圆桌会议 - 数学题
圆桌 题意就是每分钟可以将相邻的两个人的位置互换一下 , 问你 ,几分钟可以将所有人的位置互换成 原先的 B 在A的右边 C在A的左边 , 换成现在的 C 在A 的右边 , B 在 A 的 ...