2016-09-22 11 views
0

この間違い照会は何です..私は基本的な違いは、最初のバージョンが返されるということですは異なる方法でクエリと同じ方法を書いた

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

..あなたはこれをチェックすることができ照会の両方のクエリがsame resultを与えると思いました0の数と2番目の数はカウントされません。これらの行は除外されます。

パフォーマンスが異なる場合もあります。これは、最初のデータが2番目のデータよりも多くのデータを集計する必要があるためです。一方、一致するレコードがない場合でも、最初の値はkgfsのすべての値を返すことが保証されています。

0

ここで重要な点は、count(value)は値がすべてnot nullであることです。

select count(null) from table 

はあなたに0を与える一方で

select count(0) from table 

は、あなたのテーブルの行数を与えます。

2番目の動作が必要です。最初のクエリでelse 0を削除(またはelse nullと置き換えます)して、2番目のクエリと同様の結果を得ます。

Gordon氏が指摘したように、テーブル内にある範囲の日付がないkgfsの値については、最初のクエリでは<kgfs>, 0という結果が得られるので、それらはまだまったく同じです2番目のクエリでは表示されません(これはすでにwhereで除外されているためです)。

+0

ありがとうございました。私にとっては無効です – krishnakumar

関連する問題