Oracle count(*)为聚合函数返回不同的值

时间:2017-12-11 19:57:16

标签: oracle plsql

有人可以解释为什么同一个查询会返回不同的计数,具体取决于是否使用了聚合函数?

--Returns 1
select count(*) from
(
    select min(date_field) from mytable where field1 = 'xxx'
)

--Returns 0
select count(*) from
(
    select * from mytable where field1 = 'xxx'
)

1 个答案:

答案 0 :(得分:4)

如果没有GROUP BY子句,则查询:

select min(date_field) from mytable where field1 = 'xxx'

总是只返回一行,无论表中有多少行符合WHERE子句。

缺少GROUP BY子句会强制引擎仅从WHERE子句筛选的行中创建一个组,因此它返回一行。如果组中没有行,则表达式min(date_field)将计算为NULL

另一方面,查询:

select * from mytable where field1 = 'xxx'

生成零行或多行(与WHERE子句匹配的行)。