SQL - 获取具有整数和 varchar 列的所有列中空行的百分比?

SQL - Get percentage of empty rows in all columns with integer and varchar columns?

我有一个包含 300 多列的 table,我想看看是否有办法获取每列中空行的百分比。我想使用 Python 提取数据,然后编写一个函数。但是,有 400,000,000 多行,所以这是不可行的。所以现在我使用 sum 和 case when 语句手动获取每列的百分比,如下所示:

select (100.0 * sum(case when A = ' ' or A is null then 1 else 0 end)) / count(*) as A
       ,(100.0 * sum(case when B is null then 1 else 0 end)) / count(*) as B
       ,(100.0 * sum(case when C = ' ' or C is null then 1 else 0 end)) / count(*)  as C
       ,(100.0 * sum(case when D = ' ' or D is null then 1 else 0 end)) / count(*)  D
       ,(100.0 * sum(case when E = ' ' or E is null then 1 else 0 end)) / count(*)  E
       ,(100.0 * sum(case when F is null then 1 else 0 end)) / count(*) as F
       ....
from table

我已经为大约 30 列完成了此操作,但我正在尝试查看是否有一种方法可以在 table 中的所有列中执行此操作。有些列包含整数,所以我不能使用

 case when C = ' ' or C is null then 1 else 0 end

我必须使用

 case when C is null then 1 else 0 end
 

有没有办法继续使用这种逻辑,其中 case 语句会根据列的类型发生变化并获取所有列的百分比?谢谢

我解决这个问题的方法是使用 Python 和 Redshift。不确定这是否是最好的方法,但这对我有用。

我首先使用@nachospiu 评论'pg_get_cols'中的函数来获取所有列名

query = '''select col_name
            from pg_get_cols("schema.table") 
            cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int)
            '''
cols = pd.read_sql_query(query, rsm.dbengine)

然后,一旦我有了所有的列名,我就创建了一个 for 循环,使用 try 和 except 语句获取每列的百分比,这样如果列不是 varchar 类型,它就不会失败。

nulls = {}
for col in cols.col_name:
    try: 
        que = '''select (100.0 * sum(case when {} = ' ' or {} is null then 1 else 0 end)) / count(*) as perc
                 from schema.table
                '''.format(col, col)
        perc = pd.read_sql(que, rsm.dbengine).perc.values[0]
        nulls[col] = perc
    
    except: 
        
        que = '''select (100.0 * sum(case when  {} is null then 1 else 0 end)) / count(*) as perc
                 from schema.table
                '''.format(col)
        perc = pd.read_sql(que, rsm.dbengine).perc.values[0]
        nulls[col] = perc
      

这生成了一个字典,允许我查看每列的空值百分比。