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

PostgreSQL统计表各列非空值占比,筛选全填充列

解决PostgreSQL多列非空占比统计问题

面对800+列的表,手动编写每列的统计语句完全不现实,用动态SQL自动生成统计逻辑是最高效的方案:

方式1:生成所有列的非空占比统计语句

执行以下SQL,会输出一条可直接运行的统计语句:

SELECT 'SELECT ' || string_agg(
    format('COUNT(%I)::FLOAT / COUNT(*) AS %I_nonnull_ratio', column_name, column_name),
    ', '
) || ' FROM projectmeasures;' AS dynamic_sql
FROM information_schema.columns
WHERE table_name = 'projectmeasures'
AND table_schema = 'public'; -- 替换为你的表所在schema,默认是public

把输出的dynamic_sql内容复制执行,就能得到每一列的非空值占比。

方式2:直接筛选100%填充的列

如果只想拿到占比为1的列名,可修改动态SQL,让结果直接返回符合条件的列:

SELECT 'SELECT unnest(ARRAY[' || string_agg(
    format('CASE WHEN COUNT(%I) = COUNT(*) THEN ''%I'' END', column_name, column_name),
    ', '
) || ']) AS fully_populated_columns FROM projectmeasures;' AS dynamic_sql
FROM information_schema.columns
WHERE table_name = 'projectmeasures'
AND table_schema = 'public';

执行生成的语句后,结果中的非空值就是100%填充的列(自动过滤占比不足1的列)。

关键说明

  • COUNT(column_name)会自动忽略NULL值,COUNT(*)统计总行数,两者比值即为非空占比
  • 加::FLOAT是为了避免PostgreSQL的整数除法取整问题,确保得到精确的小数结果
  • 若表不在public schema下,务必修改table_schema的取值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:33:09