count函数用于统计行数,包括 COUNT(*)统计所有行、COUNT(列名)忽略 NULL 值、COUNT(DISTINCT 列名)统计唯一非空值,可结合 WHERE 条件和 GROUP BY 分组实现多维度计数。

在 sql 中,COUNT 函数 用于统计查询结果中行的数量,是 聚合函数 中最常用的一个。它可以用来统计表中的总记录数、某列非空值的个数,或结合条件进行分组统计。下面详细介绍其用法和常见实例。
COUNT(*) 统计所有行数
使用 COUNT(*) 可以统计查询返回的所有行数,包括包含 NULL 值的行。
例如:统计学生表中的总人数
select COUNT(*) AS total_students FROM students;
这会返回 students 表中所有记录的总数,不管任何字段是否为 NULL。
COUNT(列名) 统计非空值数量
COUNT(列名) 只统计该列中非 NULL 值的行数,忽略 NULL 值。
例如:统计有电话号码的学生数量
SELECT COUNT(phone) AS has_phone_count FROM students;
如果 phone 字段中有 10 条记录为 NULL,则这些不会被计入结果。
COUNT(DISTINCT 列名) 统计唯一值个数
使用 COUNT(DISTINCT 列名) 可以统计某一列中不同(去重后)非 NULL 值的数量。
例如:统计选课表中不同学生的数量
SELECT COUNT(DISTINCT student_id) AS unique_students FROM enrollments;
即使一个学生有多条选课记录,也只计算一次。
结合 WHERE 条件进行条件计数
COUNT 常与 WHERE 子句配合,实现条件统计。
例如:统计年龄大于 20 岁的学生人数
SELECT COUNT(*) AS count_over_20 FROM students WHERE age > 20;
只有满足条件的行才会被 COUNT 函数统计。
也可以在单个查询中实现多条件计数:
SELECT COUNT(*) AS total, COUNT(CASE WHEN gender = 'M' THEN 1 END) AS male_count, COUNT(CASE WHEN gender = 'F' THEN 1 END) AS female_countFROM students;
这种方式可以在一次查询中分别统计男女数量。
结合 GROUP BY 进行分组统计
使用 GROUP BY 可以按某一列分组,并对每组进行计数。
例如:统计每个班级的学生人数
SELECT class_id, COUNT(*) AS student_count FROM students GROUP BY class_id;
结果会列出每个 class_id 对应的學生数量。
基本上就这些。掌握 COUNT(*)、COUNT(列名)和 COUNT(DISTINCT)的 区别,再结合 WHERE 和 GROUP BY,就能应对大多数统计需求。关键是要清楚 NULL 值是否参与统计,以及是否需要去重。不复杂但容易忽略细节。


