C/C++教程

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

本文主要是介绍LintCode 1984 · 统计不同教师 id 的数量(count 函数用法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

    • 题目描述
    • 表定义: courses (课程表)
    • 样例
    • 解题思路
    • 使用 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 函数用法如下:

  • COUNT(*):包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录
  • COUNT(1):忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录
  • COUNT(列名):只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。
  • COUNT(DINTINCT 列名):只包括列名指定列,返回指定列的不同值的记录数,在统计结果的时候,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。

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

这篇关于LintCode 1984 · 统计不同教师 id 的数量(count 函数用法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!