--表示根据COL1分组,在分组内部根据 COL2排序,而此函数返回的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
create table student (id int ,classes int ,score int); insert into student values(1,1,89); insert into student values(2,1,90); insert into student values(3,1,76); insert into student values(4,2,69); insert into student values(5,2,79); insert into student values(6,2,95); insert into student values(7,3,80); insert into student values(8,3,85); insert into student values(9,3,79); commit;
select t.* from student t;
--数据显示为
id classes score
-------------------------------------------------------------
1 1 89
2 1 90
3 1 76
4 2 69
5 2 79
6 2 95
7 3 80
8 3 85
9 3 79
--需求:根据班级分组,显示每个班的英语成绩排名
--预期结果:
id classes score rank
----------- ----------- ---------------------------------------
3 1 76 1
1 1 89 2
2 1 90 3
4 2 69 1
5 2 79 2
6 2 95 3
9 3 79 1
7 3 80 2
8 3 85 3
--SQL脚本:
SELECT *, Row_Number() OVER (partition by classes ORDER BY score desc) rank FROM student;
--查询t_test表中,callid字段没有重复过的数据,效率高过group by having count
select t.*, t.rowid from t_test t where t.rowid not in (select rid from (select t2.rowid rid, row_number() over(partition by t2.callid order by t2.rowid desc) m from t_test t2) where m <> 1) and t.rowid not in (select rid from (select t2.rowid rid, row_number() over(partition by t2.callid order by t2.rowid asc) m from t_test t2) where m <> 1);
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)