LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)
作者:互联网
LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)
题目地址:LintCode 1984 · 统计不同教师 id 的数量
题目描述
请编写 SQL 语句,统计课程表 courses 中不同的教师 id teacher_id 的数量,最后返回统计值,结果列名显示为 teacher_count 。
表定义: courses (课程表)
列名 | 类型 | 注释 |
---|---|---|
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;
进行提交,答案通过
使用 count 函数
当我查看题解时,发现下面这条 SQL
SELECT COUNT(DISTINCT(teacher_id)) AS teacher_count
FROM courses ;
看了答案以后,还以为 DISTINCT
关键字还有忽略 NULL
的作用
通过 count(*) 和 count(teacher_id) 对比发现 count(列名) 的方式会忽略 NULL 值
在面向百度编程后,得知 count
函数用法如下:
count
函数用法如下:
- COUNT(*):包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录
- COUNT(1):忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录
- COUNT(列名):只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。
- COUNT(DINTINCT 列名):只包括列名指定列,返回指定列的不同值的记录数,在统计结果的时候,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。
标签:count,1984,LintCode,id,courses,NULL,teacher,统计 来源: https://blog.csdn.net/m0_55433493/article/details/121942104