如何在mysql中统计记录数量_mysql count函数用法

COUNT()统计全表物理行数,效率高;COUNT(字段)仅统计该字段非NULL行;常与WHERE、GROUP BY结合使用;避免COUNT(NULL)、盲目用COUNT(1)及无索引大表COUNT()。

COUNT() 是 MySQL 中最常用的聚合函数之一,专门用于统计行数。它不统计 NULL 值,但会统计所有非 NULL 字段(包括 0、空字符串等),使用时需注意语法细节和适用场景。

统计表中总行数(含 NULL)

COUNT(*) 最直接可靠,它不关心字段内容,只数物理行数,无论字段是否为 NULL 都计入:

SELECT COUNT(*) FROM users;

这是统计全表记录数的标准写法,执行效率高,尤其在 InnoDB 中通常能利用索引或元数据快速返回结果。

统计某列非 NULL 值的行数

COUNT(字段名) 只统计该字段值不为 NULL 的行数:

SELECT COUNT(email) FROM users;

如果 users 表中 email 字段有 100 条记录,其中 5 条是 NULL,则结果为 95。常用于检查数据完整性,比如确认多少用户填写了手机号:

SELECT COUNT(phone) AS filled_phone_count FROM users;

配合 WHERE 和 GROUP BY 精确统计

COUNT 常与条件筛选和分组搭配使用:

  • 统计每个部门的员工数:SELECT dept, COUNT(*) FROM employees GROUP BY dept;
  • 统计已激活用户的数量:SELECT COUNT(*) FROM users WHERE status = 'active';
  • 统计不同注册渠道的用户数:SELECT source, COUNT(*) FROM users GROUP BY source ORDER BY COUNT(*) DESC;

避免常见误区

以下写法容易出错或低效:

  • COUNT(1)COUNT(*) 效果相同,但无实际优势,不推荐刻意使用;
  • COUNT(NULL) 永远返回 0,毫无意义;
  • 对大表频繁执行 COUNT(*) 且无合适索引时,可能引发全表扫描,影响性能;
  • 不要用 COUNT(id) 替代 COUNT(*) 除非你明确需要排除 id 为 NULL 的行(而主键 id 实际上不可能为 NULL)。