Sql 如何知道a列是否包含所有空值
例如,如何知道所有列是否只包含空值Sql 如何知道a列是否包含所有空值,sql,postgresql,null,Sql,Postgresql,Null,例如,如何知道所有列是否只包含空值 ID | col1 | col2 | col3 | col4 -----------+----------+-----------+-----------+----------- 1 | Null | Null |带值|带值 2 |带值|空|带值|带值 3 |带值| Null | Null | Null 4 |带值|空|带值|带值 5 |带值| Null | Null | Null 6 |空|空|空|空 7 |带值|空|带值|带值 8 |带值| Null |
ID | col1 | col2 | col3 | col4
-----------+----------+-----------+-----------+-----------
1 | Null | Null |带值|带值
2 |带值|空|带值|带值
3 |带值| Null | Null | Null
4 |带值|空|带值|带值
5 |带值| Null | Null | Null
6 |空|空|空|空
7 |带值|空|带值|带值
8 |带值| Null | Null | Null
只有col2
为空,因此结果应仅为col2
ID | col2|
-----------+----------+
1 |空|
2 |零|
3 |零|
4 |零|
5 |零|
6 |零|
7 |零|
8 |空|
任何帮助都将不胜感激。您将计算不为空的列:
SELECT 0 = count(col1) AS col1_all_null,
0 = count(col2) AS col2_all_null,
...
FROM mytable;
这利用了聚合函数忽略空值(至少是几乎所有值)的事实。计算非空的列:
SELECT 0 = count(col1) AS col1_all_null,
0 = count(col2) AS col2_all_null,
...
FROM mytable;
这利用了聚合函数忽略空值的事实(至少是几乎所有的值)。为什么您希望所有的行都是空的列?你知道这些值是什么 此外,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;
为什么您希望所有列的所有行都
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;
查询结果集有一组已定义的列,独立于表内容。这是不可能的,因为在执行查询之前,必须知道结果所包含的列。如果
count(col)=0
,则该列只包含空值。如果min(col)为空
或max(col)为空
,则可以使用列名称作为字符串值的单行。查询结果集具有定义的列集,与表内容无关。这是不可能的,因为在执行查询之前,必须知道结果所包含的列。如果count(col)=0
,则该列只包含null值。如果min(col)为null
或max(col)为null,则该列也可以工作。