0

我正在尝试对表中的列编写查询。在“文本”列中,我可以有 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 

我可以获得前三个选择语句值,但最后一个带有 null 的值返回零,而其中有带有 null 的行。如何编写这个查询?谢谢

4

2 回答 2

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;
于 2013-07-08T01:14:29.477 回答
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
于 2013-07-08T01:15:54.093 回答