leetcode-SQL-1112. 每位学生的最高成绩

简介: leetcode-SQL-1112. 每位学生的最高成绩

题目

题目链接

表:Enrollments

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| course_id     | int     |
| grade         | int     |
+---------------+---------+
(student_id, course_id) 是该表的主键。

编写一个 SQL 查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例 1:

输入:
Enrollments 表:
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 2          | 2         | 95    |
| 2          | 3         | 95    |
| 1          | 1         | 90    |
| 1          | 2         | 99    |
| 3          | 1         | 80    |
| 3          | 2         | 75    |
| 3          | 3         | 82    |
+------------+-----------+-------+
输出:
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 1          | 2         | 99    |
| 2          | 2         | 95    |
| 3          | 3         | 82    |
+------------+-----------+-------+

解题

使用窗口函数(好处是不改变原来的行数,如果用group by会改变原来的行数)

rank 的并列前2名,位次都是1。第3名就是3了。

select student_id,course_id,grade
from (
    select
        student_id,
        course_id,
        grade,
        rank() over(partition by student_id order by grade desc,course_id) as rn
    from Enrollments
)as t
where t.rn=1;
相关文章
|
5月前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
6月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_106 查找成绩处于中游的学生
「SQL面试题库」 No_106 查找成绩处于中游的学生
|
6月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_61 每位学生的最高成绩
「SQL面试题库」 No_61 每位学生的最高成绩
|
SQL 测试技术 PHP
【毕业设计之PHP系列】php+sql成绩查询系统(三)
【毕业设计之PHP系列】php+sql成绩查询系统
170 0
|
SQL 关系型数据库 MySQL
【毕业设计之PHP系列】php+sql成绩查询系统(二)
【毕业设计之PHP系列】php+sql成绩查询系统
117 0
|
关系型数据库 MySQL Unix
【毕业设计之PHP系列】php+sql成绩查询系统(一)
【毕业设计之PHP系列】php+sql成绩查询系统
146 0
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL Server成绩统计分析中的排名问题介绍
成绩分析中经常遇到的问题就是排名问题了,今天给大家介绍一下SQL Server排名中经常用到的ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()这四个好兄弟。
SQL Server成绩统计分析中的排名问题介绍
|
数据库
LeetCode(数据库)- 查找成绩处于中游的学生
LeetCode(数据库)- 查找成绩处于中游的学生
89 0
|
数据库
LeetCode(数据库)- 每位学生的最高成绩
LeetCode(数据库)- 每位学生的最高成绩
105 0