1 语法
sum(col1) over(partition by col2 order by col3 )
- 按col2 进行分组(partition ),每组以col3 进行排序(order),并进行连续加总(sum)
2 案例
2.1 描述
- 某班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80-90都是B,70-80分为C,60~70为D,E为60分以下
- 假设每个名次最多1个人,比如有2个A,那么必定有1个A是第1名,有1个A是第2名
2.2 表数据
2.3 需求
- 请你写出一个SQL查询,如果一个学生知道了自己综合成绩以后,最差是排第几名? 结果按照grade升序排序,以上例子查询如下:
- 第1行表示,学生成绩为A的知道自己最差为第2名
第2行表示,学生成绩为B的知道自己最差为第4名
第3行表示,学生成绩为C的知道自己最差为第6名
第4行表示,学生成绩为D的知道自己最差为第7名
2.4 Code
select
grade,
sum(number) over(order by grade) t_rank
from class_grade;
或者
select
grade,
(select sum(number) from class_grade c2 where c2.grade <= c1.grade) t_rank
from class_grade c1
order by grade;
2.5 建表语句
drop table if exists class_grade;
CREATE TABLE class_grade (
grade varchar(32) NOT NULL,
number int(4) NOT NULL
);
INSERT INTO class_grade VALUES
('A',2),
('D',1),
('C',2),
('B',2);