各位看官要是高兴,点个赞再走呗
任务描述
本关任务:编写SQL
查询来实现二种排名方式的分数排名。
score
表结构信息如下:
Id | Score |
---|---|
1 | 3.52 |
2 | 3.65 |
3 | 4.23 |
4 | 3.85 |
5 | 4.23 |
6 | 3.65 |
如果两个分数相同,则两个分数排名(Rank
)相同。
情况一:平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。
情况二:排名是非连续的。例:1、1、1、4、4、6。
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
select Score,(select count(Distinct Score)from score where score>=s.score)As Rank from score s order by score DESC;
select Score,(select count(Score)+1 from score where score>s.score)As Rank from score s order by score DESC;
--########## End ##########
任务描述
本关任务:某市建了一个新的体育馆,每日人流量信息被记录在gymnasium
表中:序号 (id
)、日期 (date
)、 人流量 (visitors_flow
)。
请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100
。
gymnasium
表结构数据如下:
id | date | visitors_flow |
---|---|---|
1 | 2019-01-01 | 58 |
2 | 2019-01-02 | 110 |
3 | 2019-01-03 | 123 |
4 | 2019-01-04 | 67 |
5 | 2019-01-05 | 168 |
6 | 2019-01-06 | 1352 |
7 | 2019-01-07 | 382 |
8 | 2019-01-08 | 326 |
9 | 2019-01-09 | 99 |
提示:每天只有一行记录,日期随着 id
的增加而增加。
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
select distinct a.*
from gymnasium a,gymnasium b,gymnasium c
where a.visitors_flow>=100 and b.visitors_flow>=100 and c.visitors_flow>= 100 and
(
(a.id+1=b.id and b.id+1=c.id)or
(a.id-1=b.id and a.id+1=c.id)or
(a.id-1=c.id and a.id+1=b.id)or
(a.id-2=b.id and a.id-1=c.id)or
(a.id-1=b.id and a.id-2=c.id)
)
order by a.id
--########## End ##########
任务描述
本关任务:计算每个班的语文总成绩和数学总成绩,要求科目中低于60
分的成绩不记录总成绩。
tb_score
结构数据:
name | chinese | maths |
---|---|---|
A | 89 | 98 |
B | 99 | 89 |
C | 55 | 66 |
D | 88 | 66 |
E | 55 | 66 |
F | 88 | 99 |
tb_class
表结构数据:
stuname | classname |
---|---|
A | C1 |
B | C2 |
C | C3 |
D | C2 |
E | C1 |
F | C3 |
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
select c.classname,
sum(case when chinese>60 then chinese else 0 End)chinese,
sum(case when maths>60 then maths else 0 end) maths
from tb_score s, tb_class c
where c.stuname=s.name
group by classname;
--########## End ##########
任务描述
本关任务:根据提供的表和数据,查询平均成绩小于60
分的同学的学生编号(s_id
)、学生姓名(s_name
)和平均成绩(avg_score
),要求平均成绩保留2
位小数点。(注意:包括有成绩的和无成绩的)
student
表数据:
s_id | s_name | s_sex |
---|---|---|
01 | Mia | 女 |
02 | Riley | 男 |
03 | Aria | 女 |
04 | Lucas | 女 |
05 | Oliver | 男 |
06 | Caden | 男 |
07 | Lily | 女 |
08 | Jacob | 男 |
course
表数据:
c_id | c_name | t_id |
---|---|---|
01 | Chinese | 02 |
02 | Math | 01 |
03 | English | 03 |
teacher
表数据:
t_id | t_name |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
score
表部分数据:
s_id | c_id | s_score |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
... | ... | ... |
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
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);
--########## End ##########
任务描述
本关任务:根据提供的表和数据,查询与s_id=01
号同学学习的课程完全相同的其他同学的信息(学号s_id
,姓名s_name
,性别s_sex
)。
student
表数据:
s_id | s_name | s_sex |
---|---|---|
01 | Mia | 女 |
02 | Riley | 男 |
03 | Aria | 女 |
04 | Lucas | 女 |
05 | Oliver | 男 |
06 | Caden | 男 |
07 | Lily | 女 |
08 | Jacob | 男 |
course
表数据:
c_id | c_name | t_id |
---|---|---|
01 | Chinese | 02 |
02 | Math | 01 |
03 | English | 03 |
teacher
表数据:
t_id | t_name |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
score
表部分数据:
s_id | c_id | s_score |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
... | ... | ... |
相关知识
略
答案:
注意:这一关有许多问题,其中包括代码换行和未左对齐操作导致测评失败!!!我的代码在头歌平台是可以测评通过的,但仍有可能会因为其他平台传输导致最后的代码测评不能通过!!!!
--#请在此添加实现代码
--########## Begin ##########
select s1.* from student s1 where not exists(
select * from score sc where sc.s_id='01' and not exists(
select * from score where score.c_id=sc.c_id and s1.s_id=s_id)
)and not exists(
select * from score sc1 where sc1.s_id=s1.s_id and not exists(
select * from score where c_id=sc1.c_id and s_id='01')
)
and s1.s_id<>'01';
--########## End ##########
任务描述
本关任务:根据提供的表和数据,查询各科成绩,进行排序并显示排名,按学生编号(s_id
)、课程编号(c_id
)、学生成绩(s_score
)和排名(rank
)进行输出,具体效果请查看测试集。
student
表数据:
s_id | s_name | s_sex |
---|---|---|
01 | Mia | 女 |
02 | Riley | 男 |
03 | Aria | 女 |
04 | Lucas | 女 |
05 | Oliver | 男 |
06 | Caden | 男 |
07 | Lily | 女 |
08 | Jacob | 男 |
course
表数据:
c_id | c_name | t_id |
---|---|---|
01 | Chinese | 02 |
02 | Math | 01 |
03 | English | 03 |
teacher
表数据:
t_id | t_name |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
score
表部分数据:
s_id | c_id | s_score |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
... | ... | ... |
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
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
任务描述
本关任务:根据提供的表和数据,查询选修“张三”老师所授课程的学生中,成绩最高的学生信息(具体输出信息请查看测试说明)及其成绩。
student
表数据:
s_id | s_name | s_sex |
---|---|---|
01 | Mia | 女 |
02 | Riley | 男 |
03 | Aria | 女 |
04 | Lucas | 女 |
05 | Oliver | 男 |
06 | Caden | 男 |
07 | Lily | 女 |
08 | Jacob | 男 |
course
表数据:
c_id | c_name | t_id |
---|---|---|
01 | Chinese | 02 |
02 | Math | 01 |
03 | English | 03 |
teacher
表数据:
t_id | t_name |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
score
表部分数据:
s_id | c_id | s_score |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
... | ... | ... |
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
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');
--########## End ##########
任务描述
本关任务:根据提供的表和数据,查询两门及其以上不及格课程的同学的学号(s_id
)、姓名(s_name
)及其平均成绩(avg_score
),要求计算平均成绩后为整数。
student
表数据:
s_id | s_name | s_sex |
---|---|---|
01 | Mia | 女 |
02 | Riley | 男 |
03 | Aria | 女 |
04 | Lucas | 女 |
05 | Oliver | 男 |
06 | Caden | 男 |
07 | Lily | 女 |
08 | Jacob | 男 |
course
表数据:
c_id | c_name | t_id |
---|---|---|
01 | Chinese | 02 |
02 | Math | 01 |
03 | English | 03 |
teacher
表数据:
t_id | t_name |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
score
表部分数据:
s_id | c_id | s_score |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
... | ... | ... |
相关知识
略 ####编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充。
答案:
--#请在此添加实现代码
--########## Begin ##########
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;
--########## End ##########
任务描述
本关任务:给定一张 tb_Salary
表,如下所示,有 m = 男性
和 f = 女性
的值。交换所有的 f
和 m
值(例如,将所有 f
值更改为 m
,反之亦然)。
id | name | sex | salary |
---|---|---|---|
1 | Elon | f | 7000 |
2 | Donny | f | 8000 |
3 | Carey | m | 6000 |
4 | Karin | f | 9000 |
5 | Larisa | m | 5500 |
6 | Sora | m | 500 |
要求只使用一句更新update
语句,且不允许含有任何select
语句完成任务。
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
UPDATE tb_Salary
SET
sex = CASE sex WHEN 'm' THEN 'f'
ELSE 'm'
END;
--########## End ##########
任务描述
本关任务:改变相邻俩学生的座位。
小美是一所中学的信息科技老师,她有一张 tb_Seat
座位表,平时用来储存学生名字和与他们相对应的座位 id
。
tb_Seat
表结构数据如下:
id | name |
---|---|
1 | Elon |
2 | Donny |
3 | Carey |
4 | Karin |
5 | Larisa |
现在小美想改变相邻俩学生的座位(若学生人数为奇数,则无需改变最后一位同学的座位),现在需要你编写SQL
输出小美想要的的结果。
相关知识
略
答案:
--#请在此添加实现代码
--########## Begin ##########
select
case id
when 1 then 2
when 2 then 1
when 3 then 4
when 4 then 3
when 5 then 5
else 0
end id,name from tb_Seat order by id asc;
--########## End ##########
收工睡觉