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

如何用SQL按行统计任意表的NULL值(无需手动指定列)

按行统计任意表的NULL值(无需手动指定列名)

要实现无需手动指定列名、适配任意表的行级NULL值统计,核心思路是通过数据库的系统视图获取目标表的列名,动态拼接SQL语句计算每行的NULL数量。以下是主流数据库的具体实现方案:

MySQL/MariaDB 实现

利用information_schema.columns获取表的列信息,动态生成NULL计数表达式:

SET @table_name = 'tab';
SET @sql = NULL;

-- 拼接每个列的NULL判断表达式
SELECT GROUP_CONCAT(
  CONCAT('IF(`', column_name, '` IS NULL, 1, 0)')
  SEPARATOR ' + '
) INTO @null_count_expr
FROM information_schema.columns
WHERE table_schema = DATABASE()
  AND table_name = @table_name;

-- 生成完整查询语句并执行
SET @sql = CONCAT(
  'SELECT *, (', @null_count_expr, ') AS NULL_CNT FROM ', @table_name
);

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

PostgreSQL 实现

通过information_schema.columns获取列名,结合string_agg和动态执行语句实现:

DO $$
DECLARE
  table_name text := 'tab';
  null_count_expr text;
BEGIN
  -- 拼接NULL计数表达式
  SELECT string_agg(
    format('(CASE WHEN %I IS NULL THEN 1 ELSE 0 END)', column_name),
    ' + '
  ) INTO null_count_expr
  FROM information_schema.columns
  WHERE table_schema = current_schema()
    AND table_name = table_name;

  -- 动态执行查询
  EXECUTE format(
    'SELECT *, (%s) AS NULL_CNT FROM %I',
    null_count_expr,
    table_name
  );
END $$;

SQL Server 实现

使用sys.columns获取列信息,通过STRING_AGG拼接表达式后动态执行:

DECLARE @table_name NVARCHAR(128) = N'tab';
DECLARE @null_count_expr NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);

-- 生成NULL计数表达式
SELECT @null_count_expr = STRING_AGG(
  CONCAT('CASE WHEN ', QUOTENAME(name), ' IS NULL THEN 1 ELSE 0 END'),
  ' + '
)
FROM sys.columns
WHERE object_id = OBJECT_ID(@table_name);

-- 拼接并执行完整SQL
SET @sql = CONCAT(
  'SELECT *, (', @null_count_expr, ') AS NULL_CNT FROM ', @table_name
);

EXEC sp_executesql @sql;

测试验证

以你提供的示例表为例,执行对应数据库的代码后,将得到如下结果:

+----+------+------+------+----------+
| ID | COL1 | COL2 | COL3 | NULL_CNT |
+----+------+------+------+----------+
|  1 | a    | b    | c    |        0 |
|  2 | a    | b    | null |        1 |
|  3 | a    | null | null |        2 |
|  4 | null | null | null |        3 |
+----+------+------+------+----------+

内容的提问来源于stack exchange,提问作者Lukasz Szozda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 19:33:14