如何知道某列是否包含所有NULL

时间:2019-01-28 07:21:57

标签: sql postgresql null

例如如何知道所有列是否仅包含空值

ID         | col1     | col2      |col3       | col4     
-----------+----------+-----------+-----------+-----------
 1         | Null     |Null       | with value| with value
 2         |with value|Null       | with value| with value
 3         |with value|Null       | Null      | Null    
 4         |with value|Null       | with value| with value
 5         |with value|Null       | Null      | Null  
 6         |Null      |Null       | Null      | Null    
 7         |with value|Null       | with value| with value
 8         |with value|Null       | Null      | Null  

col2为NULL,因此结果应仅为col2

ID         | col2     |
-----------+----------+
 1         |Null      |
 2         |Null      |
 3         |Null      |
 4         |Null      |
 5         |Null      |
 6         |Null      |
 7         |Null      |
 8         |Null      | 

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您计算不为NULL的列:

SELECT 0 = count(col1) AS col1_all_null,
       0 = count(col2) AS col2_all_null,
       ...
FROM mytable;

这利用了聚合函数忽略NULL值的事实(至少,几乎所有的值)。

答案 1 :(得分:0)

为什么要让所有NULL列的所有行?您知道值是什么。

此外,SQL查询只能返回一组固定的列,因此您不能过滤这些列。如果您只想列出所有列值为NULL的列名,则可以将这些列名连接在一起:

select concat_ws(',',
                 (case when count(col1) = 0 then 'col1' end),
                 (case when count(col2) = 0 then 'col2' end),
                 (case when count(col3) = 0 then 'col3' end)
                )
from t;