题目:张三的 MySQL 学习之路(一)
题目难度:困难
题目描述:张三最近对 MySQL 数据库感兴趣,决定要好好学习数据库,但…学习的道路总是充满艰辛的。张三今天遇到了一个难题,他左思右想、苦思冥想、茶不思饭不想也没能想出解决办法。情况是这样的,现有 teachers 表中记录着离职的教师信息,id 的值即是教师离职的顺序,在 courses 表中记录着每个教师教授的课程信息,关联 id 为 teacher_id。
现在知道教师是以国籍来分团队的,且每个团队的成立至少有 3 个教师,若是一个教师团队集体离职,则在 teachers 表中信息记录为连续且国籍相同,现在需要统计每一个教师团队集体离职会有多少学生需要等待新的教师,结果按团队国籍排序。
他需要创建一个视图 v_courses_teachers 来解决这个问题~
表定义 1: teachers (教师表)
注意:这里的教师表里面的教师全部都是要离职的,不用考虑10个老师有3个离职这样的的情况
表定义 2: courses (课程表)
结果视图定义: v_courses_teachers(视图)
样例
输入数据:
courses 表:
teachers 表:
返回结果:
解题思路
如上面所示,现在的teachers 表中记录着离职的教师信息(可以理解全部都是要离职的教师),id 的值即是教师的顺序。在 courses 表中记录着每个教师教授的课程信息,关联 id 为 teacher_id。已知教师是以国籍来分团队的,且每个团队的成立至少有 3 个教师(没有3个老师及以上不能成立教师团队),现在需要统计每一个教师团队集体离职会有多少学生需要等待新的教师(即统计这些离职教师之前所教学生的总数之和),结果按团队国籍排序。他需要创建一个视图 v_courses_teachers 来解决这个问题。
分析题目要求:
条件一:找出符合要求的团队国籍
条件二:根据国籍,找出对应的教师的 id
条件三:根据教师 id 找出对应的学生,并对学生数进行求和
根据题目要求,要创建一个 v_courses_teachers 视图
源代码
-- Write your SQL here --
create view v_courses_teachers as
select
t.country,
sum(student_count) as student_count
from
teachers as t
left join
courses as c
on
t.id = c.teacher_id
where
(
(t.country = (select country from teachers where id = t.id + 1)
and
t.country = (select country from teachers where id = t.id + 2))
or
(t.country = (select country from teachers where id = t.id - 1)
and
t.country = (select country from teachers where id = t.id - 2))
or
(t.country = (select country from teachers where id = t.id + 1)
and
t.country = (select country from teachers where id = t.id - 1))
)
group by t.country
order by t.country;
提交结果
笨猫猫的写法有点小菜,用了20分钟才写出来,可能还有更好的解法哦!