我在Postgres数据库中有一张表,我想确定其填充率(即我想了解数据缺失的频率)。我需要编写一个函数,对于所选列表中的每一列(几十列),统计具有非空值的列的数量和百分比。
问题是,我不知道如何以编程方式迭代列的列表,因为我不知道如何从其名称的字符串引用列。我已经了解了可以使用the
这个函数的原始代码会将每个字段都返回100%的填充率,但我知道这是错误的。我该如何修改这个函数?
问题是,我不知道如何以编程方式迭代列的列表,因为我不知道如何从其名称的字符串引用列。我已经了解了可以使用the
EXECUTE
command来运行动态编写的SQL,但我无法让它正常工作。这是我的当前函数:CREATE OR REPLACE FUNCTION get_fill_rates() RETURNS TABLE (field_name text, fill_count integer, fill_percentage float) AS $$
DECLARE
fields text[] := array['column_a', 'column_b', 'column_c'];
total_rows integer;
BEGIN
SELECT reltuples INTO total_rows FROM pg_class WHERE relname = 'my_table';
FOR i IN array_lower(fields, 1) .. array_upper(fields, 1)
LOOP
field_name := fields[i];
EXECUTE 'SELECT COUNT(*) FROM my_table WHERE $1 IS NOT NULL' INTO fill_count USING field_name;
fill_percentage := fill_count::float / total_rows::float;
RETURN NEXT;
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM get_fill_rates() ORDER BY fill_count DESC;
这个函数的原始代码会将每个字段都返回100%的填充率,但我知道这是错误的。我该如何修改这个函数?