其他分享
首页 > 其他分享> > LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)

LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)

作者:互联网

LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)


题目地址:LintCode 1984 · 统计不同教师 id 的数量

题目描述

请编写 SQL 语句,统计课程表 courses 中不同的教师 id teacher_id 的数量,最后返回统计值,结果列名显示为 teacher_count 。

表定义: courses (课程表)

列名类型注释
idint主键
namevarchar课程名称
student_countint学生总数
created_atdate开课时间
teacher_idint讲师 ID
  • teacher_id 为空,默认该 teacher_id 不存在,则在统计时不计入
  • 返回统计结果的列名需要更改
  • 如果统计不到数据,则返回 0

样例

样例一:
表内容:courses

idnamestudent_countcreated_atteacher_id
1Advanced Algorithms8802020/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
9Object Oriented Design3002020/8/84
10Dynamic Programming20002018/8/181

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

teacher_count
3

样例二:
表内容 : courses

idnamestudent_countcreated_atteacher_id
1Advanced Algorithms8802020/6/1
2System Design13502020/7/18
9Object Oriented Design3002020/8/8
10Dynamic Programming20002018/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 函数用法如下:

文章出处:关于mysql中的count()函数

标签:count,1984,LintCode,id,courses,NULL,teacher,统计
来源: https://blog.csdn.net/m0_55433493/article/details/121942104