COUNT
COUNT() 数数——表里有多少行、满足条件的多少行、某列非空的有多少行。三种常见写法含义不同:
COUNT(*):统计所有行,包括NULL行和重复行。最常用。COUNT(列名):统计该列非NULL的行数,NULL行不计入。COUNT(DISTINCT 列名):统计该列去重后的非NULL值个数。
COUNT(*) 和 COUNT(1) 在 MySQL 中性能几乎一样,不用纠结。关键是理解 COUNT(列名) 会漏掉 NULL——如果某列允许 NULL,COUNT(*) 和 COUNT(该列) 的结果可能不同。
以飞翔科技为例:
-- 公司总员工数
SELECT COUNT(*) AS 总人数 FROM employees;
-- 技术部有多少人
SELECT COUNT(*) AS 技术部人数
FROM employees
WHERE dept_code = 2;
-- 有绩效奖金的员工数(排除 NULL)
SELECT COUNT(performance_bonus) AS 有奖金人数
FROM employees;
-- 公司有多少个不同的部门
SELECT COUNT(DISTINCT dept_code) AS 部门数
FROM employees;
第三个例子:如果有些员工的 performance_bonus 是 NULL,COUNT(performance_bonus) 会比 COUNT(*) 少。第四个例子用 COUNT(DISTINCT dept_code) 一步算出部门数,比先 SELECT DISTINCT 再数行数高效。