请编写 SQL 语句,统计课程表 courses 中不同的教师 id teacher_id 的数量,最后返回统计值,结果列名显示为 teacher_count 。
列名 | 类型 | 注释 |
---|---|---|
id | int | 主键 |
name | varchar | 课程名称 |
student_count | int | 学生总数 |
created_at | date | 开课时间 |
teacher_id | int | 讲师 ID |
- 若
teacher_id
为空,默认该teacher_id
不存在,则在统计时不计入- 返回统计结果的列名需要更改
- 如果统计不到数据,则返回 0
样例一:
表内容:courses
id | name | student_count | created_at | teacher_id |
---|---|---|---|---|
1 | Advanced Algorithms | 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 |
9 | Object Oriented Design | 300 | 2020/8/8 | 4 |
10 | Dynamic Programming | 2000 | 2018/8/18 | 1 |
在运行你的 SQL 语句之后,表应返回:
teacher_count |
---|
3 |
样例二:
表内容 : courses
id | name | student_count | created_at | teacher_id |
---|---|---|---|---|
1 | Advanced Algorithms | 880 | 2020/6/1 | |
2 | System Design | 1350 | 2020/7/18 | |
9 | Object Oriented Design | 300 | 2020/8/8 | |
10 | Dynamic Programming | 2000 | 2018/8/18 |
在运行你的 SQL 语句之后,表应返回:
teacher_count |
---|
0 |
因为样例二中 teacher_id
均为空,所以统计结果为 0
在看到样例一时,第一时间想到使用 distinct
关键字进行去重,于是SQL如下
SELECT COUNT(*) AS teacher_count FROM (SELECT DISTINCT teacher_id FROM courses) t;
就当我觉得轻轻松松点击提交时候,提示答案不对~~
然后我才注意到这句话:若 teacher_id
为空,默认该 teacher_id
不存在,则在统计时不计入
修改 SQL 如下:
SELECT COUNT(*) AS teacher_count FROM (SELECT DISTINCT teacher_id FROM courses) t WHERE teacher_id IS NOT NULL;
进行提交,答案通过
当我查看题解时,发现下面这条 SQL
SELECT COUNT(DISTINCT(teacher_id)) AS teacher_count FROM courses ;
看了答案以后,还以为 DISTINCT
关键字还有忽略 NULL
的作用
通过 count(*) 和 count(teacher_id) 对比发现 count(列名) 的方式会忽略 NULL 值
在面向百度编程后,得知 count
函数用法如下:
count
函数用法如下:
文章出处:关于mysql中的count()函数