ORACLE中count*和count2有什么区别

问题描述

我正在查看一些sql代码,并试图找出oracle中count(*)和count(2)有什么区别。

例如

select id_number from person
where type_id = 0010
group by id_number
having count(2) > 1; 
 

解决方法

两个表达式产生相同的结果。

count(<expr>)考虑了null的所有非<expr>值。 2是文字非空值,因此像count(*)一样考虑所有行。

您也可以使用count(1)count('foo')或任何其他(非null)文字值来表示这一点。

我更喜欢count(*),因为它在某种程度上更加清楚:无论该行包含什么值,都对组中的每一行进行计数。

,

它们的含义有所不同:

  • COUNT(*)返回的计数
  • COUNT(<expr>)计算非空的

在这种情况下,您使用的COUNT(2)表达式始终不为null。因此,它将产生与计数行相同的值。

从理论上讲,对行进行计数的速度可能会稍快一些,因为必须对数据进行计数,但实际上并不需要进行检查。因此,在对行进行计数时,引擎无需物化以计算表达式的列值,而只需要处理指针即可。