以不同的方式写了查询相同的方法

时间:2016-09-22 10:40:53

标签: mysql sql

这些查询之间的区别是什么..我认为给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;

2 个答案:

答案 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声明过滤掉了。)