题目:

表: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)-每位学生的最高成绩(中等)的更多相关文章

  1. 力扣(LeetCode)学生出勤记录I 个人题解

    给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : Present,到场 如果一个学生的出勤记录中不超过一个' ...

  2. 力扣---511. 游戏玩法分析 I

    活动表 Activity: +--------------+---------+| Column Name  | Type    |+--------------+---------+| player ...

  3. 力扣---1148. 文章浏览 I

    Views 表:+---------------+---------+| Column Name   | Type    |+---------------+---------+| article_i ...

  4. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  5. sql查询每个学生的最高成绩mysql语句

    张三 语文 100 张三 数学 83 李四 语文 88 李四 数学 100 查询每个学生的最高成绩. select b.* from (select name,max(score) score fro ...

  6. JS数据结构第六篇 --- 二叉树力扣练习题

    1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...

  7. 力扣(LeetCode)删除排序链表中的重复元素II 个人题解

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 思路和上一题类似(参考 力扣(LeetCode)删除排序链表中的重复元素 个人题解)) 只不过这里需要用到一个前 ...

  8. C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法

    题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...

  9. LeetCode 1244. 力扣排行榜

    地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...

  10. 力扣50题 Pow(x,n)

    本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...

随机推荐

  1. 基于python的环境噪声实时监测系统

    一 系统简介 1.简介 该系统可以实时显示噪声量大小,并进行一段时间的噪声统计. 2.特性 实现噪声值的统计 实现了噪声显示 完整的主题和样式控制 简单的内置日志窗口 二 源码解析   1.噪声分贝的 ...

  2. day14--Java常用类之字符串相关类02

    Java常用类 2.字符串相关类 String.StringBuilder.StringBuffer类是三个字符串相关类. String类代表不可变字符序列,StringBuilder类和String ...

  3. 逆向通达信Level-2 续三 (KTL python控制台动态调试)

    python控制台逆向分析. python 跟 js 自如切换 逆向通达信Level-2 续十一 (无帐号登陆itrend研究版) 逆向通达信Level-2 续十 (trace脱壳) 逆向通达信Lev ...

  4. RabbitMq消息队列进一步认识

    参考:https://www.cnblogs.com/wanglijun/p/10896896.html(应用场景) https://blog.csdn.net/weixin_41588751/art ...

  5. .gvfs 文件夹 异常

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. Linux安装jdk和mysql

    Linux安装jdk和mysql JDK安装 操作步骤: 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux空jdk-8u171-inux-x64.tar.gz(这里注意自己 ...

  7. MySQL(单表查询、多表查询、Navicat软件使用、查询练习、pymysql模块)

    一 单表操作 表准备和注意事项 create table employee( id int not null unique auto_increment, name varchar(20) not n ...

  8. KingbaseES V8R6 等待事件之CLogControlLock

    前言 Kingbase数据库的tuple行头部来标识这条记录的事务结束状态(未知.已提交.已回滚),在事务提交时如果并发更新100万行记录,需要对多个page的tuple进行更改,这种繁重的操作会对数 ...

  9. KingbaseES file_dw 介绍

    file_dw简介 ​ file_fdw模块提供外部数据包装器file_fdw, 它能被用来访问服务器的文件系统中的数据文件,或者在服务器上执行程序并读取它们的输出. 数据文件或程序输出必须是能够被C ...

  10. 连接Windows 平台 KingbaseES异常

    概述 应用连接Windows平台的KingbaseES 数据库,报错"com.kingbase8.util.KSQLException: 致命错误: 用户"system" ...