力扣1112(MySQL)-每位学生的最高成绩(中等)
题目:
表:Enrollments

(student_id, course_id) 是该表的主键。
问题
编写一个 SQL 查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。
示例
Enrollments 表:
Result 表:

建表语句:
1 Create table If Not Exists Enrollments_1112 (student_id int, course_id int, grade int);
2 Truncate table Enrollments_1112;
3 insert into Enrollments_1112 (student_id, course_id, grade) values ('2', '2', '95'),('2', '3', '95'),('1', '1', '90'),('1', '2', '99'),('3', '1', '80'),('3', '2', '75'),('3', '3', '82');
解题思路:
“”查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门”:
①以student_id进行分组,按照grade进行降序排列,如果grade相同再加上字段course_id升序排列,增加字段排序数rnk;
1 select *,row_number() over(partition by student_id order by grade desc,course_id) as rnk
2 from Enrollments_1112;

②最终取rnk = 1的数据即可。
1 select student_id,course_id,grade
2 from (
3 select *,row_number() over(partition by student_id order by grade desc,course_id) as rnk
4 from Enrollments_1112
5 ) as temp
6 where rnk = 1;

小知识:
又忘记排序的区别了,再写一次
①rank():相同的数据排序数相同,下一个不同就跳跃排序,例如:[1,2,2,4]
②dese_rank():相同的数据排序相同,下一个不同的也连续排序,例如:[1,2,2,3]
③row_number():相同的数据连续排序,例如:[1, 2, 3, 4]
力扣1112(MySQL)-每位学生的最高成绩(中等)的更多相关文章
- 力扣(LeetCode)学生出勤记录I 个人题解
给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : Present,到场 如果一个学生的出勤记录中不超过一个' ...
- 力扣---511. 游戏玩法分析 I
活动表 Activity: +--------------+---------+| Column Name | Type |+--------------+---------+| player ...
- 力扣---1148. 文章浏览 I
Views 表:+---------------+---------+| Column Name | Type |+---------------+---------+| article_i ...
- 力扣算法题—069x的平方根
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...
- sql查询每个学生的最高成绩mysql语句
张三 语文 100 张三 数学 83 李四 语文 88 李四 数学 100 查询每个学生的最高成绩. select b.* from (select name,max(score) score fro ...
- JS数据结构第六篇 --- 二叉树力扣练习题
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...
- 力扣(LeetCode)删除排序链表中的重复元素II 个人题解
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 思路和上一题类似(参考 力扣(LeetCode)删除排序链表中的重复元素 个人题解)) 只不过这里需要用到一个前 ...
- C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法
题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...
- LeetCode 1244. 力扣排行榜
地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...
- 力扣50题 Pow(x,n)
本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...
随机推荐
- C++实现一个简单的生产者-消费者队列
本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能第一次生成的不一定合适,多刷新几次. 生 ...
- [置顶]
tomcat处理请求导致页面出现ERR_CONNECTION_RESET错误解决方案
现象: 浏览器发送请求到servlet,servlet处理时间太久,所以导致chrome浏览器出现ERR_CONNECTION_RESET错误 解决方案: 在相应servlet执行最后添加一句代码: ...
- Java 学习分享
建议语言入门可以先看看视频,学习网站可以是github,极客时间,infoQ等,然后去看书深入研究学习.学习最有效的方式一定是自己动手写代码,而不是看别人的代码,自己下载Intelli Idea多敲敲 ...
- C++ Qt开发:QUdpSocket实现组播通信
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUd ...
- 记录--TS类型写不好?一起来训练提升吧!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...
- AI金融预测领域综述文章筛选,附论文及代码链接,2021年版
21年的综述最近读了3篇,总结笔记如下: (2021)Systematic Literature Review: Stock Price Prediction Using Machine Learni ...
- C#调用C++ (使用C++/CLI)
简介 C++/CLI(C++ Common Language Infrastructure)是一种允许在 .NET 平台上创建托管代码(managed code)和非托管代码(unmanaged co ...
- NF-ResNet:去掉BN归一化,值得细读的网络信号分析 | ICLR 2021
论文提出NF-ResNet,根据网络的实际信号传递进行分析,模拟BatchNorm在均值和方差传递上的表现,进而代替BatchNorm.论文实验和分析十分足,出来的效果也很不错.一些初始化方法的理论效 ...
- KingbaseES V8R6集群运维案例之---securecmd连接需要密码问题
KingbaseES V8R6集群运维案例之---securecmd连接需要密码问题 案例说明: 在KingbaseES V8R6集群可以使用securecmdd代替sshd实现集群主机节点间的通讯, ...
- KingbaseES V8R3集群运维案例之---failover故障处理
案例说明: 此案例,为KingbaseES V8R3集群failover切换时,通用的故障处理方式.通过对failover.log和recovery.log日志的解读,让大家了解KingbaseE ...