这些查询之间的区别是什么..我认为给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)
基本区别在于第一个版本将返回0
的计数而第二个版本将不会。这些行将被过滤掉。
性能可能也有差异,因为第一个可能需要聚合比第二个更多的数据。另一方面,第一个保证返回kgfs
的所有值,即使没有匹配的记录。
答案 1 :(得分:0)
此处的重点(除了您日期中的不同年份)是count(value)
使用not null
的值计算所有内容。
select count(0) from table
将为您提供表格中的行数,而
select count(null) from table
会给你0
。
您想要第二种行为。在第一个查询中移除else 0
(或将其替换为else null
),以获得与第二个查询类似的结果。
它们仍然只是相似,不相等,因为正如戈登指出的那样,对于表中的kgfs
值,但在范围内没有日期,在第一个查询中你将得到一行{ {1}}在结果中,在第二个查询中你不会(因为它们已经被<kgfs>, 0
声明过滤掉了。)