2013-07-08 86 views
0

我正試圖在表中的列上寫一個查詢。在「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語句的值,但同時也有與它空行的最後一個與空返回零。如何編寫這個查詢?由於

+1

你想要的文字爲空 – bsoist

回答

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; 
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 
相關問題