先确定是在数什么
这里讨论单列计数,不讨论多列去重或外连接。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与去重成为两个独立步骤。

全空列不等于没有行
若表里只有两行,code都为NULL,COUNT(*)为2,另外两种计数为0。若WHERE筛选后没有输入行,三种结果才都为0。不能把“列里没有已知值”说成“表里没有记录”。
COUNT(1)的常量1在每行都不是NULL,因此也数输入行;不是累加1,更不是只数列值等于1的记录。复核COUNT空值练习时,依次检查参数、输入行数、NULL和重复值。涉及分组或连接时,先确定实际输入数据,再用计数规则。

带着哪一步的问题咨询
知英教育可帮助你梳理计数对象与练习顺序。查看软件设计师学习安排,再通过咨询入口提供脱敏题意和自己的步骤;不需要数据库账号,不承诺考试结果。
来源与适用范围
- MySQL 8.4:统计行数;核对日期2026-10-13。
- MySQL 8.4:聚合函数及NULL规则;核对日期2026-10-13。
- PostgreSQL:两种COUNT的定义;核对日期2026-10-13。
- 上海2026年软件考试通知(仅考务背景,不作为技术规则依据);核对日期2026-10-13。
图示、数字与例句为原创解释练习;不代表真实客户记录、考试原题或通过承诺。

