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.....顺序的结果集

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

 举例如下:

你可能感兴趣的:(数据库)