头歌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;
相关推荐
rchmin1 天前
Prompt Engineering 从入门到精通的系统学习路径
人工智能·学习·prompt
q***9941 天前
Redis的Spring配置
数据库·redis·spring
Q***K551 天前
C在物联网中的物联网平台
物联网
S***y3961 天前
MySQL视频
数据库·mysql
智能化咨询1 天前
(62页PPT)物联网智慧建筑综合解决方案(附下载方式)
物联网
周杰伦fans1 天前
[特殊字符] 代理模式超详细讲解 ——.NET
数据库·c#·代理模式
江苏世纪龙科技1 天前
开启汽车实训新视界:大众迈腾整车检测与诊断MR仿真实训系统
学习
TDengine (老段)1 天前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
2301_800256111 天前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql
冰封剑心1 天前
MiniCPM-V-2_6 (4-bit 量化)使用
java·前端·数据库