mysql求每科前两名的信息,over()开窗函数的用法

您所在的位置:网站首页 sql语句查询成绩前十名 mysql求每科前两名的信息,over()开窗函数的用法

mysql求每科前两名的信息,over()开窗函数的用法

2024-07-14 23:12| 来源: 网络整理| 查看: 265

面试官:有如下学生成绩表:students_grades

查询每门课程grades前两名的学生姓名及成绩,要求输出列格式如下:

name, number, course, grade

这里需要使用开窗函数/分析函数:over()

什么是开窗函数:

开窗函数/分析函数:over()

开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。

开窗函数的调用格式为:

函数名(列名) OVER(partition by 列名 order by列名) 

有时候一组数据只返回一组值是不能满足需求的,如我们经常想知道各个地区的前几名、各个班或各个学科的前几名。这时候需要每一组返回多个值。用开窗函数解决这类问题非常方便。

上面这道题的sql就用到了over()开窗函数:

1、先用开窗函数将所有成绩查询出来并排序

select g.*, row_number() over(partition by g.course order by g.grade desc) number from grade g

结果如下:

 

2、再取前两名的成绩

SELECT * FROM ( SELECT g.*, row_number() over ( PARTITION BY g.course ORDER BY g.grade DESC ) number FROM grade g ) gg WHERE gg.number


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3