gpt4 book ai didi

sql - Oracle SQL : query to calculate percentage of non-null values for each column in a table

转载 作者:行者123 更新时间:2023-12-04 09:56:11 27 4
gpt4 key购买 nike

我知道我可以使用这个查询来获取给定表的所有列名:

select column_name from all_tab_columns where table_name='my_table';

我可以使用这个查询来计算表中给定列的非空值的百分比:
select count(col_1) / count(*), count(col_2) / count(*)
from my_table

但我想结合这两个查询来获取给定表中所有列的非空值的百分比(无需手动输入每个表的列名)

给定表的所需输出:
column_name, completeness
col_1, 0.8
col_2, 1.0
col_3, 0.0

是否可以仅使用 Select 语句(无 PL/SQL 循环)来执行此操作?

最佳答案

数据字典 View all_tab_columns 中已经存在表的非空值的数量:

CREATE TABLE t AS SELECT * FROM all_objects;

EXECUTE DBMS_STATS.GATHER_TABLE_STATS(NULL, 'T');

SELECT column_name, num_nulls FROM all_tab_columns WHERE table_name='T';

COLUMN_NAME NUM_NULLS
OWNER 0
OBJECT_NAME 0
SUBOBJECT_NAME 66502
OBJECT_ID 0
DATA_OBJECT_ID 62642
...

GATHER_TABLE_STATS分析表并存储空值的数量。当然,如果您(或其他人)插入/删除/更新表,则统计快照不再准确。

要获得“完整性”比率,您不仅需要 num_nulls,还需要表中的总行数。要获得它们,您需要加入 View ALL_TABLES , 栏目 NUM_ROWS ,然后减去 NUM_ROWS - NUM_NULLS :
SELECT table_name, column_name, 
t.num_rows - c.num_nulls / NULLIF(t.num_rows, 0) AS completeness
FROM all_tables t
JOIN all_tab_columns c
USING (owner, table_name);

关于sql - Oracle SQL : query to calculate percentage of non-null values for each column in a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920691/

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