当前位置: 首页 > news >正文

LeetCode_sql_day22(1112.每位学生的最高成绩)

描述:1112.每位学生的最高成绩

表:Enrollments

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| course_id     | int     |
| grade         | int     |
+---------------+---------+
(student_id, course_id) 是该表的主键(具有唯一值的列的组合)。
grade 不会为 NULL。

编写解决方案,找出每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 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    |
+------------+-----------+-------+

数据准备:

Create table If Not Exists Enrollments (student_id int, course_id int, grade int)
Truncate table Enrollments
insert into Enrollments (student_id, course_id, grade) values ('2', '2', '95')
insert into Enrollments (student_id, course_id, grade) values ('2', '3', '95')
insert into Enrollments (student_id, course_id, grade) values ('1', '1', '90')
insert into Enrollments (student_id, course_id, grade) values ('1', '2', '99')
insert into Enrollments (student_id, course_id, grade) values ('3', '1', '80')
insert into Enrollments (student_id, course_id, grade) values ('3', '2', '75')
insert into Enrollments (student_id, course_id, grade) values ('3', '3', '82');

分析:

①根据每个学生分组 根据分数降序  分数相同根据课程号升序排名

select *, 
                   row_number() 
                           over (partition by student_id order by grade desc,course_id) r1 
            from Enrollments

②取排名为1 的数据

select *, row_number() over (partition by student_id order by grade desc,course_id) r1
from Enrollments;

代码:

with t1 as (select *, row_number() over (partition by student_id order by grade desc,course_id) r1 from Enrollments)
select student_id, course_id, grade
from t1
where r1 = 1;

总结:

设置一个排名开窗函数 使用row_number 避免重复  按照分数优先 然后课程其次的优先级排名

http://www.lryc.cn/news/434645.html

相关文章:

  • OFDM信号PARP的CCDF图
  • LeetCode之高频SQL50题
  • echarts多组堆叠柱状图
  • 打造安心宠物乐园:EasyCVR平台赋能猫咖/宠物店的智能视频监控解决方案
  • springboot请求传参常用模板
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
  • WPF中创建横向的ListView
  • A表和B表公共元素产生链表C
  • Rust运算符
  • Oracle rman 没有0级时1级备份和0级大小一样,可以用来做恢复 resetlogs后也可以
  • idea中配置Translation插件完成翻译功能
  • 如何看待:低代码开发平台的兴起无需经验?
  • OpenCV-轮廓检测
  • vue页面使用自定义字体
  • C++——list常见函数的使用和模拟实现(2)
  • C 标准库 - `<float.h>`
  • 【机器人工具箱Robotics Toolbox开发笔记(二)】Matlab中机器人工具箱的下载与安装
  • ROS2 Nav2 - Smac 规划器
  • LabVIEW环境中等待FPGA模块初始化完成
  • 手机TF卡格式化后数据恢复:方法、挑战与预防措施
  • ceph对象存储使用的一些思考
  • 单词排序C++实现
  • 828华为云征文 | Flexus X 实例服务器网络性能深度评测
  • STL —heap算法源码刨析 make_heap、push_heap、pop_heap、sort_heap操作分析
  • 走进低代码表单开发(一):可视化表单数据源设计
  • 简单好用的OCR API
  • c++的拷贝构造函数和赋值函数
  • 什么自动猫砂盆才适合旅游党?4个选购技巧统统告诉你!
  • 算法知识点————双指针【删除重复元素】【反转链表】
  • 建造者模式builder