先确定是在数什么

这里讨论单列计数,不讨论多列去重或外连接。COUNT空值题先看参数:星号数输入行,字段表达式数其值不是NULL的行,DISTINCT字段还要合并重复的非空值。

NULL表示缺失或未知,不是数字0,也不是空字符串。列中确实存入的0或空字符串仍不是NULL。知英教育建议先画三个框,分别标出“行”“非空”“不同非空”,不要把一条规则套到三个函数上。

四行数据,三个结果各自有依据

自编数据:code列依次为A、A、NULL、B,共四行。COUNT(*)包括code为NULL的那一行,结果为4;COUNT(code)略过NULL,留下A、A、B,结果为3;COUNT(DISTINCT code)再去重,剩下A和B,结果为2。

对应查询是SELECT COUNT(*) FROM sample;、SELECT COUNT(code) FROM sample;和SELECT COUNT(DISTINCT code) FROM sample;。sample只是练习中的假设表名,不需要在业务数据库建表。COUNT空值计算的差异来自计数对象,而不是三个查询看到不同数据。知英教育特意保留两行A,让忽略NULL与去重成为两个独立步骤。

四行自编数据逐步得出4、3、2三个计数结果
计算图:先忽略NULL,再按需要去重;数据为自编练习。

全空列不等于没有行

若表里只有两行,code都为NULL,COUNT(*)为2,另外两种计数为0。若WHERE筛选后没有输入行,三种结果才都为0。不能把“列里没有已知值”说成“表里没有记录”。

COUNT(1)的常量1在每行都不是NULL,因此也数输入行;不是累加1,更不是只数列值等于1的记录。复核COUNT空值练习时,依次检查参数、输入行数、NULL和重复值。涉及分组或连接时,先确定实际输入数据,再用计数规则。

两行全NULL和零行结果集的计数边界
边界图:全空列仍有两行,空结果集没有输入行。

带着哪一步的问题咨询

知英教育可帮助你梳理计数对象与练习顺序。查看软件设计师学习安排,再通过咨询入口提供脱敏题意和自己的步骤;不需要数据库账号,不承诺考试结果。

来源与适用范围

图示、数字与例句为原创解释练习;不代表真实客户记录、考试原题或通过承诺。