DB2中 rownumber() over( order by)是如何排序的?

对于DB2, “只查询出需要显示的记录” 唯一的办法就是使用 rownumber() over( order by ) 函数

 对于此函数,db2官方文档说明很少,感觉理解起来很有难度。官方文档:

http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.sql.ref.doc/doc/r0023461.html  

 试验了半天,现在总算是搞明白了,结合下面的sql,和大家分享下 此函数的执行过程

select rownumber() over(order by ord_id) as PAGINATE_COL_ROWNBR, ord_id, ord_item_id from ei.onetableastwo order by ord_item_id asc;

 执行步骤是这样的:

 一:根据查询条件(注意:此时不使用“select 本身的order by”),得到结果集。

此时的结果集还没有被分配序号

二、对 一 中得到的结果集分配序号。如何分配序号呢?

根据“over()的order by”对 一 中得到的结果集排序,然后对已经排序的结果集从头到尾依次分配序号,序号就是1, 2, 3......

所以,经过此步骤,得到的是:通过“over()的order by”排序的,而且排完序后被从头到尾分配了1, 2, 3......的结果集

三、对 二 中得到的被分配了序号的结果集 再使用 “select 本身的order by”进行排序

这次排序中 在 二 中被分配的序号会跟着起所在的行记录而移动,也就是说,在 二 中被分配的序号不会再变化了

所以,经过此步骤,得到的是:序号可能不会是1, 2, 3.....顺序的结果集

此时的结果集就是最终的结果集

 举例如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值