2016-09-22 139 views
0

是什麼這種區別查詢..我想這兩個查詢給same result可以選中此查詢..以不同的方式寫查詢同樣的方法

select kgfs, 
     count(case when loan_disbursement_date between '2015-04-01' and '2016-03-31' then urn else 0 end) as count 
from all_cms_loans_dump_unique 
where kgfs <> '' and 
     urn <> '' 
group by kgfs; 




select kgfs, count(urn) 
from all_cms_loans_dump_unique 
where loan_disbursement_date between '2016-04-01' and '2017-03-31' and 
     kgfs <> '' and 
     urn <> '' 
group by kgfs; 

回答

0

的基本區別是,第一個版本將返回計數爲0,第二個不會。這些行將被過濾掉。

性能可能也有差異,因爲第一個可能需要比第二個聚合更多的數據。另一方面,第一個保證返回kgfs的所有值,即使沒有匹配的記錄。

0

這裏的重要一點(除了您的日期的不同年份),count(value)計數值爲not null

select count(0) from table 

會給你表中的行數,而

select count(null) from table 

會給你0

你想要第二個行爲。在第一個查詢中刪除else 0(或用else null替換它)以獲得與第二個查詢相似的結果。

它們仍然只是相似的,而不是相同的,因爲正如Gordon指出的,對於表中kgfs的值,但沒有日期範圍,在第一個查詢中,您將在結果中獲得一行<kgfs>, 0 ,在你的第二個查詢中你不會(因爲它們已經被where -statement過濾了)。

+0

謝謝大家..對我有效 – krishnakumar