统计空值数量须用 IS NULL 判断,不可用 = NULL;常用 COUNT(*) WHERE column IS NULL;多列空值可用 CASE WHEN 或 PostgreSQL 的 FILTER;NULL 与空字符串 '' 不同,需分别处理。

统计空值数量,核心是用 IS NULL 判断,不能用等号(= NULL 无效),也不能直接写 WHERE column = NULL —— 这样查不到任何结果。
最常用、最直观的方式:
SELECT COUNT(*) FROM table_name WHERE column_name IS NULL;
如果想同时看非空数量,可以一行写出:
SELECT COUNT(*) FILTER (WHERE column_name IS NULL) AS null_count, COUNT(*) FILTER (WHERE column_name IS NOT NULL) AS not_null_count FROM table_name;
(注:FILTER 语法适用于 PostgreSQL;MySQL 和 SQL Server 需换用 CASE)
在不支持 FILTER 的数据库中,统一用 CASE WHEN:
SELECT COUNT(CASE WHEN column_name IS NULL THEN 1 END) AS null_count FROM table_name;
SELECT COUNT(CASE WHEN col1 IS NULL THEN 1 END) AS col1_nulls, COUNT(CASE WHEN col2 IS NULL THEN 1 END) AS col2_nulls, COUNT(CASE WHEN col3 IS NULL THEN 1 END) AS col3_nulls FROM table_name;
字符串字段中,''(空串)是有效值,不是 NULL。若需同时统计 NULL 和空串:
SELECT COUNT(*) FROM table_name WHERE column_name IS NULL OR column_name = '';
数字或日期类型不会出现空字符串,但可能有默认值(如 0、'1970-01-01'),这些都不是 NULL,需按业务逻辑单独判断。
想一眼看清哪些字段缺失严重?可用动态查询生成语句(以 PostgreSQL 为例):
SELECT
'SELECT ' ||
STRING_AGG(
'COUNT(CASE WHEN ' || column_name || ' IS NULL THEN 1 END) AS ' || column_name || '_nulls',
', '
) ||
' FROM ' || table_name || ';' AS sql_to_run
FROM information_schema.columns
WHERE table_name = 'your_table'
GROUP BY table_name;执行结果会输出一条含所有列空值统计的 SELECT 语句,复制运行即可。
以上就是SQL统计空值数量怎么写_NULL判断实战技巧解析【技巧】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号