Postgresql 计算多列中的空值数

Postgresql 计算多列中的空值数,postgresql,Postgresql,我想计算单个表中几列中出现的NULL。我需要的是每列的计数,而不是整个表的总数。我非常希望在单个查询中这样做,以避免来回的开销,简化我的应用程序端代码,并避免多个表扫描 如何计算每个特定列为NULL的行数 迄今为止的想法 COUNTexplicit对非NULL的事物进行计数,但我可以这样做,将NULL转换为非NULL,反之亦然,强制COUNT执行我想要的操作: SELECT COUNT(CASE WHEN my_column IS NULL THEN TRUE ELSE NULL END) F

我想计算单个表中几列中出现的
NULL
。我需要的是每列的计数,而不是整个表的总数。我非常希望在单个查询中这样做,以避免来回的开销,简化我的应用程序端代码,并避免多个表扫描

如何计算每个特定列为
NULL
的行数

迄今为止的想法
  • COUNT
    explicit对非
    NULL
    的事物进行计数,但我可以这样做,将
    NULL
    转换为非
    NULL
    ,反之亦然,强制
    COUNT
    执行我想要的操作:

    SELECT COUNT(CASE WHEN my_column IS NULL THEN TRUE ELSE NULL END) FROM my_table;
    
    但这真的非常丑陋,特别是因为我想在同一个查询中对多个列执行此操作

  • NULLIF
    在输入为
    NULL
    时返回
    NULL
    ,因此这没有帮助

有更干净的方法吗?

试试这个:

SELECT COUNT(*)-COUNT(column1) As column1, COUNT(*)-COUNT(column2) As column2 FROM my_table; 
也许这对你有用。正如您所提到的,
COUNT
只计算非空值,这将为您提供所需的空值之和。

尝试以下方法:

SELECT COUNT(*)-COUNT(column1) As column1, COUNT(*)-COUNT(column2) As column2 FROM my_table; 

也许这对你有用。正如您所提到的,
COUNT
只计算非空值,这将为您提供所需的空值之和。

我简要地提到,我希望对同一查询中的多个列执行此操作。我将修改这个问题,以进一步强调这一点。非常感谢。很抱歉,我没有说得更清楚。@jpmc26我明白了-编辑似乎更合适吗?我似乎有更多的澄清要做。我需要单个列的计数(因此A列中的
NULL
s的数量和B列中的
NULL
s的数量)。再次抱歉。我非常感谢您的帮助。我简要地提到,我希望在同一个查询中的多个列上执行此操作。我将修改这个问题,以进一步强调这一点。非常感谢。很抱歉,我没有说得更清楚。@jpmc26我明白了-编辑似乎更合适吗?我似乎有更多的澄清要做。我需要单个列的计数(因此A列中的
NULL
s的数量和B列中的
NULL
s的数量)。再次抱歉。我非常感谢你的帮助。