目录
第1关:交换工资
任务描述
本关任务:给定一张 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 'f' THEN 'm'
WHEN 'm' THEN 'f'
ELSE sex
END;
########## End ##########
第2关:换座位
任务描述
本关任务:改变相邻俩学生的座位。
小美是一所中学的信息科技老师,她有一张 tb_Seat座位表,平时用来储存学生名字和与他们相对应的座位 id。
tb_Seat表结构数据如下:
id name
1 Elon
2 Donny
3 Carey
4 Karin
5 Larisa
现在小美想改变相邻俩学生的座位(若学生人数为奇数,则无需改变最后一位同学的座位),现在需要你编写SQL输出小美想要的的结果。
#请在此添加实现代码
########## Begin ##########
SELECT
CASE
WHEN id % 2 = 1 AND id < (SELECT MAX(id) FROM tb_Seat) THEN id + 1
WHEN id % 2 = 0 THEN id - 1
ELSE id
END AS id,
name
FROM tb_Seat
ORDER BY id;
########## End ##########
第3关:分数排名
如果两个分数相同,则两个分数排名(Rank)相同。
情况一:平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。
情况二:排名是非连续的。例:1、1、1、4、4、6。
#请在此添加实现代码
########## Begin ##########
SELECT a.Score,
COUNT(DISTINCT b.Score) + 1 AS Rank
FROM score a
LEFT JOIN score b ON b.Score > a.Score
GROUP BY a.id,a.Score
ORDER BY a.Score DESC;
SELECT a.Score,
COUNT(b.Score) + 1 AS Rank
FROM score a
LEFT JOIN score b ON b.Score > a.Score
GROUP BY a.id,a.Score
ORDER BY a.Score DESC;
########## End ##########
第4关:体育馆的人流量
请编写一个查询语句,找出人流量处于高峰的记录 id、日期 date 和人流量 visitors_flow,其中高峰定义为前后连续三天人流量均不少于 100。
#请在此添加实现代码
########## Begin ##########
SELECT DISTINCT t1.*
FROM gymnasium t1,gymnasium t2,gymnasium t3
WHERE t1.visitors_flow >= 100 AND t2.visitors_flow >= 100 AND t3.visitors_flow >= 100
AND
(
(t1.id=t2.id-1 AND t2.id=t3.id-1)
OR
(t1.id=t2.id+1 AND t1.id=t3.id-1)
OR
(t1.id=t2.id+1 AND t2.id=t3.id+1)
)
ORDER BY id;
########## End ##########
第5关:统计总成绩
本关任务:计算每个班的语文总成绩和数学总成绩,其中低于 60 分的成绩不记入总成绩。
#请在此添加实现代码
########## Begin ##########
SELECT c.classname,
SUM(CASE WHEN s.chinese >= 60 THEN s.chinese ELSE 0 END) AS chinese,
SUM(CASE WHEN s.maths >= 60 THEN s.maths ELSE 0 END) AS maths
FROM tb_class c
JOIN tb_score s ON c.stuname = s.name
GROUP BY c.classname;
########## End ##########