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>