You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态获取MySQL任意表各列的NULL值统计数量

统计MySQL数据表所有列的NULL值数量(无需硬编码表名)

要实现仅修改表名就能统计目标表所有列的NULL值数量,可以利用MySQL的information_schema系统库动态生成查询语句,无需硬编码列名。

方法一:指定数据库名的版本

只需修改@table_name和@db_name两个变量的值即可切换目标表:

SET @table_name = 'your_table_name';
SET @db_name = 'your_database_name';

-- 动态拼接各列的NULL值统计表达式
SELECT GROUP_CONCAT(
    CONCAT('SUM(CASE WHEN `', column_name, '` IS NULL THEN 1 ELSE 0 END) AS `', column_name, '_null_count`')
) INTO @sql
FROM information_schema.COLUMNS
WHERE table_schema = @db_name AND table_name = @table_name;

-- 组合成完整查询语句
SET @sql = CONCAT('SELECT ', @sql, ' FROM `', @db_name, '`.`', @table_name, '`');

-- 执行动态SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

方法二:基于当前数据库的简化版本

如果已经通过USE your_database_name;切换到目标数据库,可直接用DATABASE()函数获取当前库名,省去手动输入:

SET @table_name = 'your_table_name';

SELECT GROUP_CONCAT(
    CONCAT('SUM(CASE WHEN `', column_name, '` IS NULL THEN 1 ELSE 0 END) AS `', column_name, '_null_count`')
) INTO @sql
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = @table_name;

SET @sql = CONCAT('SELECT ', @sql, ' FROM `', @table_name, '`');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关键说明与注意事项

  • 反引号包裹列名和表名是为了兼容包含空格、MySQL关键字的特殊名称,避免语法错误
  • 若目标表列数极多,GROUP_CONCAT可能因默认长度限制(1024字符)截断结果,可临时调整会话级变量:
    SET SESSION group_concat_max_len = 1000000;
    
  • 执行此语句需要具备查询information_schema.COLUMNS的权限

内容的提问来源于stack exchange,提问作者Hammad Ali Butt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:15:26