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

举报
搞前端的半夏 发表于 2021/11/30 22:27:17 2021/11/30
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述请编写 SQL 语句, 统计每个老师教授课程的学生总数,如果教师没有授课,或者所授课程没有学生学习,则返回学生上课人数为 0。要求返回老师姓名并别名...

大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!

描述

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

列名 类型 注释
id int unsigned 主键
name varchar 讲师姓名
email 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 email 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 email 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。