lintcode-2079 · 统计每个老师教授课程的学生总数

390 阅读3分钟

描述

请编写 SQL 语句, 统计每个老师教授课程的学生总数,如果教师没有授课,或者所授课程没有学生学习,则返回学生上课人数为 0。要求返回老师姓名并别名为 teacher_name ,返回学生数量并起别名为 student_count 。
表定义:teachers(教师表)

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

表定义:courses(课程表)

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

**

  • 如果 teachers 表中数据为 null 的时候,返回的数据也为 null。

样例

样例一:

表内容 : teachers

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

表内容:courses

idnamestudent_countcreated_atteacher_id
1Senior Algorithm8802020-6-14
2System Design13502020-7-183
3Django7802020-2-293
4Web3402020-4-224
5Big Data7002020-9-111
6Artificial Intelligence16602018-5-133
7Java P6+7802019-1-193
8Data Analysis5002019-7-121
10Object Oriented Design3002020-8-84
12Dynamic Programming20002018-8-181

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

teacher_namestudent_count
Eastern Heretic3200
Northern Beggar0
Western Venom4570
Southern Emperor1520
Linghu Chong0

样例二:

表内容 : teachers

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

表内容:courses

idnamestudent_countcreated_atteacher_id
1Senior Algorithm8802020-6-1NULL
2System Design13502020-7-18NULL
3Django7802020-2-29NULL
4Web3402020-4-22NULL
5Big Data7002020-9-11NULL
6Artificial Intelligence16602018-5-13NULL
7Java P6+7802019-1-19NULL
8Data Analysis5002019-7-12NULL
10Object Oriented Design3002020-8-8NULL
12Dynamic Programming20002018-8-18NULL

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

teacher_namestudent_count
Eastern Heretic0
Northern Beggar0
Western Venom0
Southern Emperor0
Linghu Chong0

如果输入数据 courses 表中列 teacher_id 全部为 null,说明没有老师授课,所以则返回教师表中的教师名字以及对应的学生总数为 0。

题解:

本题指明:当没有授课的时候,学生数量显示为0,在mysql中我们可以使用ifnull来得到0,还有一个计算总数,可以使用sum函数进行计算。

思路: 根据教师id分组,然后左连接课程表,根据教师id链接,得到数据。

select t.name teacher_name,ifnull(sum(c.student_count),0) student_count
from teachers t
left join courses c on c.teacher_id = t.id 
group by t.id;