gpt4 book ai didi

sql - 我怎样才能得到一个表中所有列的计数(*)?使用 PostgreSQL

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:08 25 4
gpt4 key购买 nike

我有一堆表,其中有几个表有数百列。我需要计算每一列的非空值,我一直在手动进行。我想找出一种方法来获取表中所有列的所有计数。我查找了 stackoverflow 和谷歌,但无法找到答案。

我试过了,但它只是为每一列返回值 1。我知道它只是计算列数而不是每列中的值。有什么建议吗?

select count(COLUMN_NAME)
from information_schema.columns
where table_schema = 'schema_name'
and table_name = 'table_name'
group by COLUMN_NAME

最佳答案

COUNT(column_name) 始终为您提供 NON NULL 值的计数。

创建一个像这样的通用函数,它可以将模式名称和表名称作为参数。

在这里,我正在构建由 UNION ALL 连接在一起的选择语句,每个语句返回 column_name 的值,并且在动态执行时它对所有列都有效。

CREATE OR REPLACE FUNCTION public.get_count( TEXT, TEXT )
RETURNS TABLE(t_column_name TEXT, t_count BIGINT )
LANGUAGE plpgsql
AS $BODY$
DECLARE
p_schema TEXT := $1;
p_tabname TEXT := $2;
v_sql_statement TEXT;

BEGIN

SELECT STRING_AGG( 'SELECT '''
|| column_name
|| ''','
|| ' count('
|| column_name
|| ') FROM '
|| table_schema
|| '.'
|| table_name
,' UNION ALL ' ) INTO v_sql_statement
FROM information_schema.columns
WHERE table_schema = p_schema
AND table_name = p_tabname;

IF v_sql_statement IS NOT NULL THEN
RETURN QUERY EXECUTE v_sql_statement;
END IF;
END
$BODY$;

执行

knayak=# select c.col, c.count from 
public.get_count( 'public', 'employees' ) as c(col,count);
col | count
----------------+-------
employee_id | 107
first_name | 107
last_name | 107
email | 107
phone_number | 107
hire_date | 107
job_id | 107
salary | 107
commission_pct | 35
manager_id | 106
department_id | 106
(11 rows)

关于sql - 我怎样才能得到一个表中所有列的计数(*)?使用 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53087945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com