这两个Postgres查询有什么区别

时间:2014-01-26 05:04:59

标签: postgresql-9.1

Select sum(a),sum(b) 
from table 
where c like '234%' 
  and time > '2013-12-31' 
  and d = 'hello';

然后我明确计算sum(a)-sum(b)的价值。

Select sum(a-b) 
from table 
where c like '234%' 
  and time > '2013-12-31' 
  and d = 'hello';

因为这两个查询都给出了不同的结果。

通过对这两个查询执行EXPLAIN ANALYZE,我看到第二个查询已按过滤条件删除了更多行。

我无法找到解释。

1 个答案:

答案 0 :(得分:1)

差异可能是由于数据中存在空值。如果您将“a”设置为3并将“b”设置为null,那么您将收到类似以下内容的空结果:

select 3 - null;

单独执行总和将允许每个总和增加到仅为该单个列而不是整个行跳过空值的实际总和,并且可能更多地是您要查找的内容。