lintcode-2064 · 查询上课学生人数均超过 Western Venom 老师所教课程的课程信息

239 阅读2分钟

描述

请编写 SQL 语句,获取 Western Venom 教师所教的每门课程的学生人数,然后筛选课程表中哪些课程的上课学生数量均超过这些学生人数,并查询这些课程的详细信息。

表定义 1:courses(课程表)

列名类型注释
idint unsigned主键
namevarchar课程名称
student_countint学生总数
created_atdate创建时间
teacher_idint讲师 id

表定义 2:teachers(教师表)

列名类型注释
idint unsigned主键
namevarchar教师姓名
emailvarchar教师邮箱
ageint教师年龄
countryvarchar教师国籍

**

  • 查询返回列名需要与样例输出的列名大小写一致。
  • 如果输入数据中存在学生总数为 NULL,则跳过该数据。
  • 如果查询不到结果,就什么都不返回。

样例

样例一:

表内容 1:courses

idnamestudent_countcreated_atteacher_id
1Senior Algorithm8802020-06-014
2System Design13502020-07-183
3Django7802020-02-293
4Web3402020-04-224
5Big Data7002020-09-111
6Artificial Intelligence16602018-05-133
7Java P6+7802019-01-193
8Data Analysis5002019-07-121
10Object Oriented Design3002020-08-084
12Dynamic Programming20002018-08-181

表内容 2:teachers

idnameemailagecountry
1Eastern Hereticeastern.heretic@gmail.com20UK
2Northern Beggarnorthern.beggar@qq.com21CN
3Western Venomwestern.venom@163.com28USA
4Southern Emperorsouthern.emperor@qq.com21JP
5Linghu ChongNULL18CN

在运行你的 SQL 语句之后,courses 表应返回:

idnamestudent_countcreated_atteacher_id
12Dynamic Programming20002018-08-181

样例二:

表内容 1:courses

idnamestudent_countcreated_atteacher_id
1Senior Algorithm8802020-06-014
6Artificial Intelligence16602018-05-133
8Data Analysis5002019-07-121
10Object Oriented Design3002020-08-084

表内容 2:teachers

idnameemailagecountry
1Eastern Hereticeastern.heretic@gmail.com20UK
2Northern Beggarnorthern.beggar@qq.com21CN
3Western Venomwestern.venom@163.com28USA
4Southern Emperorsouthern.emperor@qq.com21JP
5Linghu ChongNULL18CN

在运行你的 SQL 语句之后,courses 表应返回:

idnamestudent_countcreated_atteacher_id

因为输入样例中没有符合条件的数据,所以这里只展示了标题,没有数据。

题解

这里主要使用all函数,首先根据名字找到id,再根据teacherid找到每门课程的学生人数。最后使用>进行比较。


SELECT * FROM courses
where student_count > all(
    SELECT cs.student_count FROM courses cs 
    join teachers ts 
    on cs.teacher_id = ts.id
    where ts.name = 'Western Venom'
)