- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
描述
请编写 SQL 语句,获取 Western Venom 教师所教的每门课程的学生人数,然后筛选课程表中哪些课程的上课学生数量均超过这些学生人数,并查询这些课程的详细信息。
表定义 1:courses(课程表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 课程名称 |
| student_count | int | 学生总数 |
| created_at | date | 创建时间 |
| teacher_id | int | 讲师 id |
表定义 2:teachers(教师表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 教师姓名 |
| varchar | 教师邮箱 | |
| age | int | 教师年龄 |
| country | varchar | 教师国籍 |
**
- 查询返回列名需要与样例输出的列名大小写一致。
- 如果输入数据中存在学生总数为 NULL,则跳过该数据。
- 如果查询不到结果,就什么都不返回。
样例
样例一:
表内容 1:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-06-01 | 4 |
| 2 | System Design | 1350 | 2020-07-18 | 3 |
| 3 | Django | 780 | 2020-02-29 | 3 |
| 4 | Web | 340 | 2020-04-22 | 4 |
| 5 | Big Data | 700 | 2020-09-11 | 1 |
| 6 | Artificial Intelligence | 1660 | 2018-05-13 | 3 |
| 7 | Java P6+ | 780 | 2019-01-19 | 3 |
| 8 | Data Analysis | 500 | 2019-07-12 | 1 |
| 10 | Object Oriented Design | 300 | 2020-08-08 | 4 |
| 12 | Dynamic Programming | 2000 | 2018-08-18 | 1 |
表内容 2:teachers
| id | name | age | country | |
|---|---|---|---|---|
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
| 5 | Linghu Chong | NULL | 18 | CN |
在运行你的 SQL 语句之后,courses 表应返回:
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 12 | Dynamic Programming | 2000 | 2018-08-18 | 1 |
样例二:
表内容 1:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-06-01 | 4 |
| 6 | Artificial Intelligence | 1660 | 2018-05-13 | 3 |
| 8 | Data Analysis | 500 | 2019-07-12 | 1 |
| 10 | Object Oriented Design | 300 | 2020-08-08 | 4 |
表内容 2:teachers
| id | name | age | country | |
|---|---|---|---|---|
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
| 5 | Linghu Chong | NULL | 18 | CN |
在运行你的 SQL 语句之后,courses 表应返回:
| id | name | student_count | created_at | teacher_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'
)