首页 > 数据库 >力扣1112(MySQL)-每位学生的最高成绩(中等)

力扣1112(MySQL)-每位学生的最高成绩(中等)

时间:2023-04-12 09:44:19浏览次数:33  
标签:grade 力扣 course 1112 student MySQL Enrollments id

题目:

表: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]

标签:grade,力扣,course,1112,student,MySQL,Enrollments,id
From: https://www.cnblogs.com/liu-myu/p/17308717.html

相关文章

  • mysql安装和nodejs连接数据库
      mysql下载地址https://dev.mysql.com/downloads/installer/        第一步,安装自定义   2.添加这三个产品   3.下一步   4.默认端口3306,如果被占用了就自己改下    5.强密码认证   6,添加密码和用户,密码......
  • PHP连接MYSQL数据库参数设置机器增删查改操作
     1.param.php <?phpsession_start();if(!$_SESSION["user"]->poststuno)exit('你的工号不正确');if($_SESSION["user"]->juese=='001')exit('未知错误,请联系管理员0001');$db_host_main="192.168.*.*";//主数......
  • C语言矩阵顺时针旋转90度和力扣34. 在排序数组中查找元素的第一个和最后一个位置
    #include<iostream>usingnamespacestd;#defineM5#include<stdlib.h>//原矩阵,某元素第n行第m列,;顺时针旋转90度后,位置变成倒数第n列,第m行//即先转置再水平翻转intn=0;voidrotation_90(intmatrix[][M],intn){ for(inti=0;i<n;i++) { for(intj=i;j<M;j++)......
  • MySQL行级锁初探
     MySQL行级锁初探 版本:8.0.29最近研究MySQL行级锁发现一个有趣的东东。正常情况下,对于表级锁来说,对于会话持有某个表的锁(无论什么类型),可以在performance_schema.metadata_locks中查到会话持有锁的信息。而对于会话对表的DML操作涉及的每一行,竟然都能在数据字典performance......
  • 安装mysql
    在服务器下执行cd/usr/local,进入到local文件中。执行mkdirmysql创建文件夹。 mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar文件拷贝到b服务器的/usr/local/mysql目录下。在b服务器cd/usr/local/mysql进入mysql文件夹,执行tar-xvfmysql-8.0.22-1.el7.x86_64.rpm-bundle.tar。......
  • Mysql主从同步
    1.配置主服务器#vi/etc/my.cnf[mysqld]character_set_server=utf8init_connect='SETNAMESutf8'#服务器唯一标识server_id=1#二进制日志文件名log-bin=master-binlog-bin-index=master-bin.indexport=3306重新启动主库#servicemysqlrestart在主数据库创......
  • mysql中字段存储不区分大小写
    mysql中查询时,遇到字段不区分大小写的情况,大小写都能取到值//sql语句中"select*fromtab_userwherebinaryusername=?andpassword=?";binary可以做到区分大小写//MySQL中默认字段是不区分大小写的,如果要完成区分大小写的功能,在设计时要注意字符集的选择......
  • pymysql 操作数据库
    一、数据库操作应用场景1、检验测试数据接口发送请求后明确会对数据库中的某个字段进行修改,但响应结果中无该字段数据时。如:ihrm删除员工接口。is_delete字段,没有在响应结果中出现!需要借助数据库校验!2、构造测试数据测试数据使用一......
  • python爬虫案列11:爬取双色球历史开奖记录并存储到mysql
    开始之前要先在MySQL创建一个名为spider的数据库,在里面创建一个名caipiao的表,表里面三个字段,data,red,blue点击查看代码importrequestsimportpymysqlfromlxmlimportetree#连接数据库conn=pymysql.connect(host='localhost',port=3306,user='root',password='......
  • 爬虫案列10:python 连接mysql
    importpymysql#打开数据库连接db=pymysql.connect(host='localhost',user='root',password='root',database='pikachu',port=3306......