头歌MySQL——复杂查询

目录

第1关:体育馆的人流量

第2关:统计总成绩

第3关:查询学生平均分

第4关:查询修课相同学生信息

第5关:查询各科成绩并排序

第6关:查询张老师课程成绩最高的学生信息

第7关:查询两门课程不及格同学信


第1关:体育馆的人流量

任务描述

本关任务:某市建了一个新的体育馆,每日人流量信息被记录在gymnasium表中:序号 (id)、日期 (date)、 人流量 (visitors_flow)。请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100。

gymnasium表结构数据如下:

提示:每天只有一行记录,日期随着 id 的增加而增加。

预期输出:

sql 复制代码
#请在此添加实现代码
select distinct a.* from gymnasium as a,gymnasium as b,gymnasium as c
where(a.visitors_flow>=100 and b.visitors_flow>=100 and c.visitors_flow>=100)
and(
    (a.id=b.id-1 and b.id=c.id-1)or
    (a.id=b.id-1 and a.id=c.id+1)or
    (a.id=b.id+1 and b.id=c.id+1)
)order by id;

第2关:统计总成绩

任务描述

本关任务:计算每个班的语文总成绩和数学总成绩,要求科目中低于60分的成绩不记录总成绩。

tb_score结构数据: tb_class表结构数据:

预期输出

sql 复制代码
#请在此添加实现代码
select t1.classname,t1.chinese,t2.maths
from(select c.classname as classname,sum(s.chinese) as chinese from tb_class c,tb_score s
    where c.stuname=s.name and s.chinese>=60 group by c.classname) t1,
(select c.classname as classname,sum(s.maths) as maths from tb_class c, tb_score s
    where c.stuname=s.name and s.maths>=60 group by c.classname) t2
where t1.classname=t2.classname;

第3关:查询学生平均分

任务描述

本关任务:根据提供的表和数据,查询平均成绩小于60分的同学的学生编号(s_id)、学生姓名(s_name)和平均成绩(avg_score),要求平均成绩保留2位小数点。(注意:包括有成绩的和无成绩的)

student表数据: score表部分数据:

teacher表数据: course表数据:

预期输出:

sql 复制代码
#请在此添加实现代码
select b.s_id,b.s_name,round(avg(a.s_score),2) as avg_score 
    from student b inner join score a 
    on b.s_id=a.s_id
    group by b.s_id,b.s_name having avg_score <=60
union
select a.s_id,a.s_name,0 as avg_score from student a
    where a.s_id not in (select distinct s_id from score);

第4关:查询修课相同学生信息

任务描述

本关任务:根据提供的表和数据,查询与s_id=01号同学学习的课程完全相同的其他同学的信息(学号s_id,姓名s_name,性别s_sex)。表格数据与第三关一致。

预期输出:

sql 复制代码
#请在此添加实现代码
select s.s_id,s.s_name,s.s_sex 
from student s
where s.s_id!="01"
and not exists(
    select c_id from score where s_id="01"
    and c_id not in(select c_id from score where s_id=s.s_id)
)
and not exists(
    select c_id from score where s_id=s.s_id
    and c_id not in(select c_id from score where s_id="01")  
);

第5关:查询各科成绩并排序

任务描述

本关任务:根据提供的表和数据,查询各科成绩,进行排序并显示排名,按学生编号(s_id)、课程编号(c_id)、学生成绩(s_score)和排名(rank)进行输出,表格数据与第三关一致。

sql 复制代码
#请在此添加实现代码
select a.s_id,a.c_id,a.s_score,count(b.s_score)+1 rank
from score a left join score b 
on a.c_id=b.c_id and a.s_score<b.s_score
group by a.s_id,a.c_id,a.s_score
order by a.c_id,a.s_score desc,count(b.s_score),a.s_id desc;

第6关:查询张老师课程成绩最高的学生信息

任务描述

本关任务:根据提供的表和数据,查询选修"张三"老师所授课程的学生中,成绩最高的学生信息(具体输出信息请查看测试说明)及其成绩。表格数据与第三关一致。

预期输出:

sql 复制代码
#请在此添加实现代码
select a.*,b.s_score,b.c_id,c.c_name from student a
inner join score b on a.s_id=b.s_id
inner join course c on b.c_id=c.c_id
where b.c_id=(
    select c_id from course c,teacher d
    where c.t_id=d.t_id and d.t_name="张三")
and b.s_score in (select max(s_score)from score where c_id="02");

第7关:查询两门课程不及格同学信息

任务描述

本关任务:根据提供的表和数据,查询两门及其以上不及格课程的同学的学号(s_id)、姓名(s_name)及其平均成绩(avg_score),要求计算平均成绩后为整数。表格数据与第三关一致。

预期输出:

sql 复制代码
#请在此添加实现代码
select a.s_id,a.s_name,round(avg(b.s_score))avg_score
from student a
inner join score b on a.s_id=b.s_id
where a.s_id in (select s_id from score where s_score<60
group by s_id having count(*)>=2)
group by a.s_id,a.s_name;
相关推荐
老虎06272 小时前
黑马点评学习笔记07(缓存工具封装)
笔记·学习·缓存
Yurko132 小时前
【C语言】选择结构和循环结构的进阶
c语言·开发语言·学习
上下翻飞的屁2 小时前
jdbcTemplate执行sql后数据库字段没有更新问题解决
java·数据库·sql
悦光阴2 小时前
SQL Server 并发控制:Fabric Warehouse只支持快照隔离
大数据·运维·数据库·fabric
范纹杉想快点毕业2 小时前
12个月嵌入式进阶计划ZYNQ 系列芯片嵌入式与硬件系统知识学习全计划(基于国内视频资源)
c语言·arm开发·单片机·嵌入式硬件·学习·fpga开发·音视频
谅望者2 小时前
SQL子查询完全指南:从零掌握嵌套查询的三种用法与最佳实践
数据库·sql·数据库开发·子查询
小叮当⇔2 小时前
知识就是力量——PM2.5传感器全面解析:从原理、型号到选型指南
物联网
阿萨德528号3 小时前
Redis 分布式锁进阶:跨语言场景下的锁兼容性与一致性保障
数据库·redis·分布式
im_AMBER3 小时前
React 12
前端·javascript·笔记·学习·react.js·前端框架