聚合时 NULL 会变卦要点
- COUNT(*) 数所有行,COUNT(列) 自动忽略该列的 NULL 行
- SUM / AVG 直接跳过 NULL,不会把它当 0 参与运算
- 想让空值按 0 参与,用 AVG(COALESCE(列, 0))
- MAX / MIN 同样忽略 NULL,空表时返回 NULL 而非 0
- GROUP BY 时 NULL 会被当成同一个分组归在一起
- 报表求和前先想清楚:NULL 到底该当 0 还是该排除
聚合时 NULL 会变卦示例
-- 总人数 vs 有奖金的人数(两者常常不同)
SELECT COUNT(*) AS headcount,
COUNT(bonus) AS with_bonus
FROM staff;
-- 让奖金为空的人也按 0 计入平均
SELECT AVG(COALESCE(bonus, 0)) AS avg_bonus
FROM staff;
避坑提醒:核对报表时,先分别跑 COUNT(*) 和 COUNT(关键列),差多少就是 NULL 行数,能快速定位问题。