Catalog 1 语法2 案例2.1 描述2.2 表数据2.3 需求2.4 Code2.5 建表语句 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 表数据 第1行表示成绩为A的学生有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);