Mysql 8.0+ 窗口函数 练习题(持续补充中)

2024-05-24 21:20

本文主要是介绍Mysql 8.0+ 窗口函数 练习题(持续补充中),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

建表语句

create table student_scores
(id      int auto_incrementprimary key,class   varchar(50) null,name    varchar(50) null,subject varchar(50) null,score   int         null
);

模拟数据

INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (1, '初一1班', '赵晨', '英语', 78);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (2, '初一1班', '钱进', '英语', 82);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (3, '初一1班', '孙浩', '英语', 85);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (4, '初一1班', '李想', '英语', 80);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (5, '初一1班', '周梅', '英语', 75);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (6, '初一2班', '吴晶', '英语', 88);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (7, '初一2班', '郑丽', '英语', 92);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (8, '初一2班', '王磊', '英语', 84);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (9, '初一2班', '冯程', '英语', 79);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (10, '初一2班', '陈思', '英语', 81);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (11, '初一3班', '林涛', '英语', 90);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (12, '初一3班', '罗阳', '英语', 85);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (13, '初一3班', '宋文', '英语', 83);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (14, '初一3班', '梁静', '英语', 88);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (15, '初一3班', '韩雪', '英语', 82);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (16, '初一1班', '赵晨', '物理', 76);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (17, '初一1班', '钱进', '物理', 80);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (18, '初一1班', '孙浩', '物理', 85);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (19, '初一1班', '李想', '物理', 90);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (20, '初一1班', '周梅', '物理', 95);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (21, '初一2班', '吴晶', '物理', 87);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (22, '初一2班', '郑丽', '物理', 83);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (23, '初一2班', '王磊', '物理', 79);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (24, '初一2班', '冯程', '物理', 81);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (25, '初一2班', '陈思', '物理', 78);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (26, '初一3班', '林涛', '物理', 82);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (27, '初一3班', '罗阳', '物理', 88);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (28, '初一3班', '宋文', '物理', 84);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (29, '初一3班', '梁静', '物理', 86);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (30, '初一3班', '韩雪', '物理', 80);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (31, '初一1班', '张伟', '数学', 73);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (32, '初一2班', '王芳', '数学', 79);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (33, '初一1班', '张伟', '数学', 73);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (34, '初一2班', '王芳', '数学', 79);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (35, '初一2班', '李娜', '数学', 75);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (36, '初一3班', '赵强', '数学', 80);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (37, '初一1班', '刘畅', '语文', 82);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (38, '初一1班', '张伟', '语文', 78);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (39, '初一2班', '王芳', '语文', 84);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (40, '初一2班', '李娜', '语文', 80);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (41, '初一3班', '赵强', '语文', 85);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (42, '初一1班', '刘畅', '英语', 88);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (43, '初一1班', '张伟', '英语', 82);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (44, '初一2班', '王芳', '英语', 79);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (45, '初一2班', '李娜', '英语', 75);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (46, '初一3班', '赵强', '英语', 90);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (47, '初一1班', '刘畅', '物理', 85);
INSERT INTO `table`.student_scores (id, class, name, subject, score) VALUES (48, '初一1班', '张伟', '物理', 80);
问题1:求出每个学生成绩最高的三条记录
-- 答案SQL:
select *
from (select *, row_number() over (partition by name order by score desc) as seq from student_scores) temp
where seq <= 3
结果:
+--+-----+----+-------+-----+---+
|id|class|name|subject|score|seq|
+--+-----+----+-------+-----+---+
|24|初一2班 |冯程  |物理     |81   |1  |
|9 |初一2班 |冯程  |英语     |79   |2  |
|42|初一1班 |刘畅  |英语     |88   |1  |
|47|初一1班 |刘畅  |物理     |85   |2  |
|37|初一1班 |刘畅  |语文     |82   |3  |
|6 |初一2班 |吴晶  |英语     |88   |1  |
|21|初一2班 |吴晶  |物理     |87   |2  |
|20|初一1班 |周梅  |物理     |95   |1  |
|5 |初一1班 |周梅  |英语     |75   |2  |
|3 |初一1班 |孙浩  |英语     |85   |1  |
|18|初一1班 |孙浩  |物理     |85   |2  |
|28|初一3班 |宋文  |物理     |84   |1  |
|13|初一3班 |宋文  |英语     |83   |2  |
|43|初一1班 |张伟  |英语     |82   |1  |
|48|初一1班 |张伟  |物理     |80   |2  |
|38|初一1班 |张伟  |语文     |78   |3  |
|40|初一2班 |李娜  |语文     |80   |1  |
|45|初一2班 |李娜  |英语     |75   |2  |
|35|初一2班 |李娜  |数学     |75   |3  |
|19|初一1班 |李想  |物理     |90   |1  |
|4 |初一1班 |李想  |英语     |80   |2  |
|11|初一3班 |林涛  |英语     |90   |1  |
|26|初一3班 |林涛  |物理     |82   |2  |
|14|初一3班 |梁静  |英语     |88   |1  |
|29|初一3班 |梁静  |物理     |86   |2  |
|8 |初一2班 |王磊  |英语     |84   |1  |
|23|初一2班 |王磊  |物理     |79   |2  |
|39|初一2班 |王芳  |语文     |84   |1  |
|44|初一2班 |王芳  |英语     |79   |2  |
|32|初一2班 |王芳  |数学     |79   |3  |
|27|初一3班 |罗阳  |物理     |88   |1  |
|12|初一3班 |罗阳  |英语     |85   |2  |
|46|初一3班 |赵强  |英语     |90   |1  |
|41|初一3班 |赵强  |语文     |85   |2  |
|36|初一3班 |赵强  |数学     |80   |3  |
|1 |初一1班 |赵晨  |英语     |78   |1  |
|16|初一1班 |赵晨  |物理     |76   |2  |
|7 |初一2班 |郑丽  |英语     |92   |1  |
|22|初一2班 |郑丽  |物理     |83   |2  |
|2 |初一1班 |钱进  |英语     |82   |1  |
|17|初一1班 |钱进  |物理     |80   |2  |
|10|初一2班 |陈思  |英语     |81   |1  |
|25|初一2班 |陈思  |物理     |78   |2  |
|15|初一3班 |韩雪  |英语     |82   |1  |
|30|初一3班 |韩雪  |物理     |80   |2  |
+--+-----+----+-------+-----+---+
问题2:找出每门课程都高于班级课程平均分的学生
select * from (select *, sum(big) over (partition by name) as sumfrom (select *, (score > avg_score) bigfrom (select *, avg(score) over (partition by class,subject) as avg_scorefrom student_scores) temp) tp) t
where sum = (select count(1) from student_scores where name = t.name)
结果:
+--+-----+----+-------+-----+---------+---+---+
|id|class|name|subject|score|avg_score|big|sum|
+--+-----+----+-------+-----+---------+---+---+
|47|初一1班 |刘畅  |物理     |85   |84.4286  |1  |3  |
|42|初一1班 |刘畅  |英语     |88   |81.4286  |1  |3  |
|37|初一1班 |刘畅  |语文     |82   |80.0000  |1  |3  |
|21|初一2班 |吴晶  |物理     |87   |81.6000  |1  |2  |
|6 |初一2班 |吴晶  |英语     |88   |82.5714  |1  |2  |
|18|初一1班 |孙浩  |物理     |85   |84.4286  |1  |2  |
|3 |初一1班 |孙浩  |英语     |85   |81.4286  |1  |2  |
|14|初一3班 |梁静  |英语     |88   |86.3333  |1  |2  |
|29|初一3班 |梁静  |物理     |86   |84.0000  |1  |2  |
|7 |初一2班 |郑丽  |英语     |92   |82.5714  |1  |2  |
|22|初一2班 |郑丽  |物理     |83   |81.6000  |1  |2  |
+--+-----+----+-------+-----+---------+---+---+

这篇关于Mysql 8.0+ 窗口函数 练习题(持续补充中)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999563

相关文章

找完工作该补充的东西

首先: 锻炼身体,包括乒乓球,羽毛球,都必须练习,学习,锻炼身体等是一个很重要的与人交际沟通的方式; 打牌,娱乐:会玩是一个人很重要的交际沟通的法宝; 摄影:这个是一个兴趣爱好,也是提高自己的审美,生活品质,当然也是与人沟通的重要途径; 做饭:这个的话就是对自己,对朋友非常有益的一件事情;

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务