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值是否参与统计,以及是否需要去重。不复杂但容易忽略细节。


