2016-09-22 71 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