首页 > 数据库技术 > 详细

Oracle中的 row_number() over (partition by order by ) 用法

时间:2014-08-08 20:40:56      阅读:596      评论:0      收藏:0      [点我收藏+]

oracle 里面经常这样用 

select col1,col2..., row_number() over (partition by colx order by coly) from table_name;;

这句话的意思是把表中的数值按照colx 分组,每一组内部按照coly排序,同时 row_number()返回排序之后该记录在改组内部的序号。

比如我们知道有emp表如下:

SQL> SELECT * FROM SCOTT.EMP;

     EMPNO ENAME                          JOB                                MGR HIREDATE                  SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------ ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 17-DEC-80                 800                    20
      7499 ALLEN                          SALESMAN                          7698 20-FEB-81                1600        300         30
      7521 WARD                           SALESMAN                          7698 22-FEB-81                1250        500         30
      7566 JONES                          MANAGER                           7839 02-APR-81                2975                    20
      7654 MARTIN                         SALESMAN                          7698 28-SEP-81                1250       1400         30
      7698 BLAKE                          MANAGER                           7839 01-MAY-81                2850                    30
      7782 CLARK                          MANAGER                           7839 09-JUN-81                2450                    10
      7788 SCOTT                          ANALYST                           7566 19-APR-87                3000                    20
      7839 KING                           PRESIDENT                              17-NOV-81                5000                    10
      7844 TURNER                         SALESMAN                          7698 08-SEP-81                1500          0         30
      7876 ADAMS                          CLERK                             7788 23-MAY-87                1100                    20
      7900 JAMES                          CLERK                             7698 03-DEC-81                 950                    30
      7902 FORD                           ANALYST                           7566 03-DEC-81                3000                    20
      7934 MILLER                         CLERK                             7782 23-JAN-82                1300                    10

用下面的语句显示如下:

SQL> SELECT ENAME,DEPTNO,EMPNO,ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY EMPNO) FROM SCOTT.EMP;

ENAME                              DEPTNO      EMPNO ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYEMPNO)
------------------------------ ---------- ---------- -----------------------------------------------
CLARK                                  10       7782                                               1
KING                                   10       7839                                               2
MILLER                                 10       7934                                               3
SMITH                                  20       7369                                               1
JONES                                  20       7566                                               2
SCOTT                                  20       7788                                               3
ADAMS                                  20       7876                                               4
FORD                                   20       7902                                               5
ALLEN                                  30       7499                                               1
WARD                                   30       7521                                               2
MARTIN                                 30       7654                                               3
BLAKE                                  30       7698                                               4
TURNER                                 30       7844                                               5
JAMES                                  30       7900                                               6

 

Oracle中的 row_number() over (partition by order by ) 用法,布布扣,bubuko.com

Oracle中的 row_number() over (partition by order by ) 用法

原文:http://www.cnblogs.com/kramer/p/3899855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!