计算一行中空值的数量以除以(未知)列数

Posted

技术标签:

【中文标题】计算一行中空值的数量以除以(未知)列数【英文标题】:Counting number of null values in a row to divide by (unknown) number of columns 【发布时间】:2020-09-11 00:37:44 【问题描述】:

我正在使用 SQL Server 14,我需要计算一行中空值的数量以创建一个新列,其中将存储每行的“完整性百分比”。例如,如果 10 列中有 9 列包含给定行的值,则该行的 % 将为 90%。

我知道这可以通过多个 Case 表达式来完成,但问题是,这些数据将用于实时仪表板,完成后将不受我的监督。

我希望每次运行函数(或过程?不确定在这种情况下使用什么)时都计算这个百分比,并且需要知道我的表中存在的列数才能计算 null一行中的值,然后除以列数以找到“完整性百分比”。

非常感谢任何帮助!

谢谢

【问题讨论】:

样本数据和预期结果以及您的尝试将会澄清。 【参考方案1】:

一种方法使用cross apply 将列取消透视到行并计算非空值的比率。

假设您的表有列col1col4,您可以这样写:

select t.*, x.*
from mytable t
cross apply (
    select avg(case when col is not null then 1.0 else 0 end) completeness_ratio
    from (values (col1), (col2), (col3), (col4)) x(col)
) x

【讨论】:

感谢您的回答。我喜欢你的方法,但今天我知道我的表中有多少列,但我可能不知道明天有多少列。我的意思是可能会在表格中添加一个额外的列,我想为此做准备。仍然不确定是否有办法为此做好准备。 @GuillermoGarcia 您可能必须使用 [Dynamic SQL][1] 并利用 [DMV][2] 获取所有列的当前列表,如果此答案适合您的需要,那么我怀疑它可以转换为使用动态 SQL 吗? [1]:mssqltips.com/sqlservertip/1160/… [2]:***.com/questions/1054984/…

以上是关于计算一行中空值的数量以除以(未知)列数的主要内容,如果未能解决你的问题,请参考以下文章

计算 Oracle 表中空值的数量?

Pyspark - 计算每个数据框列中的空值数量

MySQL 中NULL和空值的区别

MySQL 中NULL和空值的区别

PostgreSQL:计算一行中包含值的列数

JavaScript中空值合并操作符和?.操作符-使用案例