SQL累计求和

题目:牛客网SQL练习题【最差是第几名】

知识点:累计求和;窗口函数

分析题目:成绩为A的同学有2人,成绩为B的同学有2人,成绩为C的同学有2人,成绩为D的同学有1人。所以得A的同学最差排名是2,得B的同学最差排名是2+2=4,以此类推,得C的同学最差排名是2+2+2=6,得D的同学最差排名是2+2+2+1=7。因此说,最差排名实际上就是对成绩高于自己的人数做累加。

方法一:自联结

SELECT C1.grade,SUM(C2.number) AS t_rank
FROM class_grade C1,class_grade C2
WHERE C1.grade >= C2.grade
GROUP BY C1.grade    //一直不对,看了题解之后加上的
ORDER BY C1.grade;或者SELECT t1.grade,SUM(t2.number) AS t_rank 
FROMclass_grade AS t1 LEFT JOIN class_grade AS t2 ON t2.grade <= t1.grade 
GROUP BY t1.grade
ORDER BY t1.grade;

方法二:窗口函数 (MySQL 8.0以上版本支持)

SELECT grade, SUM(number) OVER (ORDER BY grade) AS t_rank
FROM class_grade;
不用写ORDER BY子句,后面有交待。

窗口函数的基本语法如下:

<窗口函数> over ( [partition by <用于分组的列名> ]order by <用于排序的列名>)[]中的内容可以省略,省略后是默认是对全局数据进行排序,因此,不需要再写order by 子句。

有关窗口函数的知识,强烈推荐这篇文章【通俗易懂的学会:SQL窗口函数】。

 

本文链接:https://my.lmcjl.com/post/14959.html

展开阅读全文

4 评论

留下您的评论.