以不同的方式写查询同样的方法
问题描述:
是什么这种区别查询..我想这两个查询给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
,第二个不会。这些行将被过滤掉。
性能可能也有差异,因为第一个可能需要比第二个聚合更多的数据。另一方面,第一个保证返回kgfs
的所有值,即使没有匹配的记录。
答
这里的重要一点(除了您的日期的不同年份),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过滤了)。
谢谢大家..对我有效 – krishnakumar