我正在尝试在表中的列上编写查询。在“text”列中,我可以具有5或10的值或null。我想得到表中5或10行的行数或null。我写了以下查询它无法正常工作
select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(text) from t_test where text=null
我可以获得前三个select语句值,但最后一个null返回零,而行中有null。怎么写这个查询?谢谢
答案 0 :(得分:3)
你应该只使用条件求和:
select count(*),
sum(case when text = '5' then 1 else 0 end) as Num_5,
sum(case when text = '10' then 1 else 0 end) as Num_10,
sum(case when text is null then 1 else 0 end) as Num_Null
from t_test;
这假设一个名为text
的字段存储为字符串,因此将常量放在引号中。如果它真的是一个数字,首先我会好奇为什么它被称为text
。在这种情况下,您可以省去单引号。
在您的情况下,最后一个不起作用,因为count(text)
计算非空值。但where
子句仅保留NULL
个值。对于那个,你应该使用count(*)
。正确的查询是:
select count(*) from t_test where text is null;
答案 1 :(得分:2)
最终查询所需要的是:
select COUNT(*) from t_test where text is null
注意:
COUNT(*)
而非COUNT(TEXT)
为空,无法呈现值is null
而不是=null
您的最后一组查询是:
select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(*) from t_test where text is null