1. 程式人生 > >oracle菜鳥學習之 分析函式-排序

oracle菜鳥學習之 分析函式-排序

oracle菜鳥學習之 分析函式-排序

排序函式

1.row_number:返回連續的排序,無論值是否相等
2.rank:具有相等值得行排序相同,序數值隨後跳躍
3.dense_rank:具有相等值得行排序相同,序號是連續得

實驗表

create table chengji(sno number,km varchar2(10),score number);
insert into chengji values(1,'YW',60);
insert into chengji values(1,'SX',60);
insert into chengji values(1,'YY',60);
insert into chengji values(2,'YW',70);
insert into chengji values(2,'SX',70);
insert into chengji values(3,'YW',80);

SQL> select * from chengji;

       SNO KM                      SCORE
---------- ------------------------------ ----------
     1 YW                     60
     1 SX                     60
     1 YY                     60
     2 YW                     70
     2 SX                     70
     3 YW                     80
     1 YW                     60
     1 SX                     60
     1 YY                     60
     2 YW                     70
     2 SX                     70

       SNO KM                      SCORE
---------- ------------------------------ ----------
     3 YW                     80

12 rows selected.

SQL> 

row_number

格式:row_number() over()
排序類似排名,如果A和B的值都是100,那麼A的排序為1,B的排序為2

SQL> select sno,km,score,row_number() over (order by score desc) from chengji;

       SNO KM          SCORE ROW_NUMBER()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------------
     3 YW         80                      1
     3 YW         80                      2
     2 YW         70                      3
     2 YW         70                      4
     2 SX         70                      5
     2 SX         70                      6
     1 SX         60                      7
     1 YY         60                      8
     1 SX         60                      9
     1 YW         60                     10
     1 YY         60                     11

       SNO KM          SCORE ROW_NUMBER()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------------
     1 YW         60                     12

12 rows selected.

SQL> 

rank

排序類似排名,如果A和B的值都是100,那麼A的排序為1,B的排序為1,C的為3

SQL> select sno,km,score,rank() over (order by score desc) from chengji;

       SNO KM          SCORE RANK()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------
     3 YW         80                1
     3 YW         80                1
     2 YW         70                3
     2 YW         70                3
     2 SX         70                3
     2 SX         70                3
     1 SX         60                7
     1 YY         60                7
     1 SX         60                7
     1 YW         60                7
     1 YY         60                7

       SNO KM          SCORE RANK()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------
     1 YW         60                7

12 rows selected.

SQL> 

dense_rank

排序類似排名,如果A和B的值都是100,那麼A的排序為1,B的排序為1,C的排序為2

SQL> select sno,km,score,dense_rank() over (order by score desc) from chengji;

       SNO KM          SCORE DENSE_RANK()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------------
     3 YW         80                      1
     3 YW         80                      1
     2 YW         70                      2
     2 YW         70                      2
     2 SX         70                      2
     2 SX         70                      2
     1 SX         60                      3
     1 YY         60                      3
     1 SX         60                      3
     1 YW         60                      3
     1 YY         60                      3

       SNO KM          SCORE DENSE_RANK()OVER(ORDERBYSCOREDESC)
---------- ------ ---------- ----------------------------------
     1 YW         60                      3

12 rows selected.

SQL>