PostgreSQL ROW_NUMBER OVER()的用法说明

  
这篇文章主要介绍了PostgreSQL ROW_NUMBER() OVER()的用法说明 , 具有很好的参考价值 , 希望对大家有所帮助 。一起跟随小编过来看看吧 。  
语法:  
1ROW_NUMBER() OVER( [ PRITITION BY col1] ORDER BY col2[ DESC ] )  
解释:  
ROW_NUMBER()为返回的记录定义个行编号 ,  PARTITION BY col1 是根据col1分组 , ORDER BY col2[ DESC ]是根据col2进行排序 。  
举例:  
postgres=# create table student(id serial,name character varying,course character varying,score integer);  
CREATE TABLE  
postgres=#   
postgres=# \d student  
    Table “public.student”  
 Column | Type |   Modifiers     
——–+——————-+———————————————-  
 id | integer  | not null default nextval(‘student_id_seq’::regclass)  
 name | character varying |   
 course | character varying |   
 score | integer  |  
   
 insert into student (name,course,score) values(‘周润发’,’语文’,89);  
 insert into student (name,course,score) values(‘周润发’,’数学’,99);  
 insert into student (name,course,score) values(‘周润发’,’外语’,67);  
 insert into student (name,course,score) values(‘周润发’,’物理’,77);  
 insert into student (name,course,score) values(‘周润发’,’化学’,87);  
 insert into student (name,course,score) values(‘周星驰’,’语文’,91);  
 insert into student (name,course,score) values(‘周星驰’,’数学’,81);  
 insert into student (name,course,score) values(‘周星驰’,’外语’,88);  
 insert into student (name,course,score) values(‘周星驰’,’物理’,68);  
 insert into student (name,course,score) values(‘周星驰’,’化学’,83);  
 insert into student (name,course,score) values(‘黎明’,’语文’,85);  
 insert into student (name,course,score) values(‘黎明’,’数学’,65);  
 insert into student (name,course,score) values(‘黎明’,’外语’,95);  
 insert into student (name,course,score) values(‘黎明’,’物理’,90);  
 insert into student (name,course,score) values(‘黎明’,’化学’,78);  
   
1. 根据分数排序  
postgres=# select *,row_number() over(order by score desc)rn from student;  
 id | name | course | score | rn   
—-+——–+——–+——-+—-  
 2 | 周润发 | 数学 | 99 | 1  
 13 | 黎明 | 外语 | 95 | 2  
 6 | 周星驰 | 语文 | 91 | 3  
 14 | 黎明 | 物理 | 90 | 4  
 1 | 周润发 | 语文 | 89 | 5  
 8 | 周星驰 | 外语 | 88 | 6  
 5 | 周润发 | 化学 | 87 | 7  
 11 | 黎明 | 语文 | 85 | 8  
 10 | 周星驰 | 化学 | 83 | 9  
 7 | 周星驰 | 数学 | 81 | 10  
 15 | 黎明 | 化学 | 78 | 11  
 4 | 周润发 | 物理 | 77 | 12  
 9 | 周星驰 | 物理 | 68 | 13  
 3 | 周润发 | 外语 | 67 | 14  
 12 | 黎明 | 数学 | 65 | 15  
(15 rows)  
   
rn是给我们的一个排序 。  
2. 根据科目分组 , 按分数排序  
postgres=# select *,row_number() over(partition by course order by score desc)rn from student;  
 id | name | course | score | rn   
—-+——–+——–+——-+—-


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。