目录
1.2使用over(partition by)函数实现小案例中的SQL
2.2 与over(partition by)函数结合的函数的介绍
2.2.1 rank() 与over(partition by ... order by ...)组合函数
2.2.2 row_number() 与over(partition by ... order by ...)组合函数
2.2.3 关于rank() 和row_number()的总结
一、小案例:
school表中有①id 序号②class 班级 ③score成绩 三个字段, 使用oracle实现按照班级分区,然后取班级中的第一名。
1.1测试数据如下:
--创建学校表school
create table school(
id varchar2(10) primary key, --序号
class varchar2(10), --班级
score NUMBER --分数
);
--插入几条数据
insert into school (id, CLASS, SROCE) values ('1', '一班', 93);
insert into school (id, CLASS, SROCE) values ('2', '一班', 93);
insert into school (id, CLASS, SROCE) values ('3', '一班', 92);
insert into school (id, CLASS, SROCE) values ('4', '一班', 81);
insert into school (id, CLASS, SROCE) values ('5', '二班', 99);
insert into school (id, CLASS, SROCE) values ('6', '二班', 99);
insert into school (id, CLASS, SROCE) values ('7', '二班', 92);
insert into school (id, CLASS, SROCE) values ('8', '二班', 83);
1.2使用over(partition by)函数实现小案例中的SQL
select *
from (select t.id,
t.class,
t.sroce,
rank() over(partition by t.class order by t.sroce desc) n
from school t)
where n = 1;