我正在查看一些SQL代码,并试图找出oracle中count(*)和count(2)之间的区别。
例如
select id_number from person
where type_id = 0010
group by id_number
having count(2) > 1; 发布于 2020-10-09 15:21:27
这两个表达式产生相同的结果。
count(<expr>)考虑到<expr>的所有非null值。2是一个文字的、非空的值,所以所有行都被考虑在内,就像count(*)一样。
您还可以用count(1)、count('foo')或任何其他(非null)文字值来表示这一点。
我更喜欢count(*),因为它在某种程度上更清楚它所做的事情:组中的每一行都被计数,而不管它包含哪些值。
发布于 2020-10-09 21:44:06
它们的含义是不同的:
COUNT(*)计数返回的rows.COUNT(<expr>)计数非空values.在本例中,您使用的是COUNT(2),其中表达式总是不为空。因此,它将产生与计数行相同的值。
理论上,计算行的速度可能稍微快一些,因为必须将数据计算为当前数据,但不需要进行真正的检查。因此,在计算行数时,引擎不需要物化列值以求表达式,而只需要处理指针。
https://stackoverflow.com/questions/64282843
复制相似问题