Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL计算没有列名的所有空值?_Sql_Snowflake Cloud Data Platform - Fatal编程技术网

如何使用SQL计算没有列名的所有空值?

如何使用SQL计算没有列名的所有空值?,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我正在从文件中读取和执行sql查询,我需要检查结果集以计算所有列中的所有空值。因为SQL是从文件中读取的,所以我不知道列名,因此在尝试查找空值时无法按名称调用列 我认为使用CTE是最好的方法,但是当我不知道列名是什么的时候,我怎么能调用这些列呢 WITH query_results AS ( <sql_read_from_file_here> ) select count_if(<column_name> is not null) FROM query_results

我正在从文件中读取和执行sql查询,我需要检查结果集以计算所有列中的所有空值。因为SQL是从文件中读取的,所以我不知道列名,因此在尝试查找空值时无法按名称调用列

我认为使用CTE是最好的方法,但是当我不知道列名是什么的时候,我怎么能调用这些列呢

WITH query_results AS
(
<sql_read_from_file_here>
)
select count_if(<column_name> is not null) FROM query_results

查询结果为 ( ) 从查询结果中选择计数(如果不为空)
如果您使用Python读取SQL语句文件,您可以执行如下操作,即使用
pglast
解析SQL查询以获取列:

import pglast
sql_read_from_file_here = "SELECT 1 foo, 1 bar"
ast = pglast.parse_sql(sql_read_from_file_here)
cols = ast[0]['RawStmt']['stmt']['SelectStmt']['targetList']
sum_stmt = "sum(iff({col} is null,1,0))"
sums = [sum_sql.format(col = col['ResTarget']['name']) for col in cols]
print(f"select {' + '.join(sums)} total_null_count from query_results")


# outputs: select sum(iff(foo is null,1,0)) + sum(iff(bar is null,1,0)) total_null_count from query_results

你知道列数吗?你能告诉我们你是如何加载数据的吗?