题目:牛客网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 评论