首页/数据/SQL 速查/COUNT(*) 与 COUNT(col) 的区别
聚合与窗口函数54 条

COUNT(*) 与 COUNT(col) 的区别

两者都可能出现在同一条 SQL 里但含义不同:COUNT(*) 数行;COUNT(col) 数非 NULL 值。排查数据质量时常用两者差值找空值。

SQL 速查数据更新于 2026-10-12

差值找空值

差值找空值
SELECT COUNT(*)                AS rows_all,
       COUNT(phone)            AS phone_not_null,
       COUNT(*) - COUNT(phone) AS phone_null
FROM users;
含 NULLCOUNT(*) 计入;COUNT(col) 不计入
性能两者都需扫描匹配行,差异主要在语义
常见误用用 COUNT(可空列) 当总数

易错点

  • 多表连接后 COUNT(*) 统计的是连接行数,要统计业务实体应 COUNT(DISTINCT 主键)
  • COUNT(1) 与 COUNT(*) 在主流数据库中优化结果一致,写法按团队规范统一即可

数据来源与参考

  • MySQL 8.0 Reference Manual · COUNT
  • PostgreSQL Documentation · Aggregate Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌