lintcode-2079 · 统计每个老师教授课程的学生总数
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述请编写 SQL 语句, 统计每个老师教授课程的学生总数,如果教师没有授课,或者所授课程没有学生学习,则返回学生上课人数为 0。要求返回老师姓名并别名...
大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!
描述
请编写 SQL 语句, 统计每个老师教授课程的学生总数,如果教师没有授课,或者所授课程没有学生学习,则返回学生上课人数为 0。要求返回老师姓名并别名为 teacher_name ,返回学生数量并起别名为 student_count 。
表定义:teachers(教师表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 讲师姓名 |
| varchar | 讲师邮箱 | |
| age | int | 讲师年龄 |
| country | varchar | 讲师国籍 |
表定义:courses(课程表)
| 列名 | 类型 | 注释 |
|---|---|---|
| id | int unsigned | 主键 |
| name | varchar | 课程名称 |
| student_count | int | 学生总数 |
| created_at | datetime | 课程创建时间 |
| teacher_id | int unsigned | 讲师 id |
**
- 如果 teachers 表中数据为 null 的时候,返回的数据也为 null。
样例
样例一:
表内容 : 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 |
表内容:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-6-1 | 4 |
| 2 | System Design | 1350 | 2020-7-18 | 3 |
| 3 | Django | 780 | 2020-2-29 | 3 |
| 4 | Web | 340 | 2020-4-22 | 4 |
| 5 | Big Data | 700 | 2020-9-11 | 1 |
| 6 | Artificial Intelligence | 1660 | 2018-5-13 | 3 |
| 7 | Java P6+ | 780 | 2019-1-19 | 3 |
| 8 | Data Analysis | 500 | 2019-7-12 | 1 |
| 10 | Object Oriented Design | 300 | 2020-8-8 | 4 |
| 12 | Dynamic Programming | 2000 | 2018-8-18 | 1 |
在运行你的 SQL 语句之后,表应返回:
| teacher_name | student_count |
|---|---|
| Eastern Heretic | 3200 |
| Northern Beggar | 0 |
| Western Venom | 4570 |
| Southern Emperor | 1520 |
| Linghu Chong | 0 |
样例二:
表内容 : 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 |
表内容:courses
| id | name | student_count | created_at | teacher_id |
|---|---|---|---|---|
| 1 | Senior Algorithm | 880 | 2020-6-1 | NULL |
| 2 | System Design | 1350 | 2020-7-18 | NULL |
| 3 | Django | 780 | 2020-2-29 | NULL |
| 4 | Web | 340 | 2020-4-22 | NULL |
| 5 | Big Data | 700 | 2020-9-11 | NULL |
| 6 | Artificial Intelligence | 1660 | 2018-5-13 | NULL |
| 7 | Java P6+ | 780 | 2019-1-19 | NULL |
| 8 | Data Analysis | 500 | 2019-7-12 | NULL |
| 10 | Object Oriented Design | 300 | 2020-8-8 | NULL |
| 12 | Dynamic Programming | 2000 | 2018-8-18 | NULL |
在运行你的 SQL 语句之后,表应返回:
| teacher_name | student_count |
|---|---|
| Eastern Heretic | 0 |
| Northern Beggar | 0 |
| Western Venom | 0 |
| Southern Emperor | 0 |
| Linghu Chong | 0 |
如果输入数据 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;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)