首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORACLE中的计数(*)和计数(2)有什么区别?

ORACLE中的计数(*)和计数(2)有什么区别?
EN

Stack Overflow用户
提问于 2020-10-09 15:19:59
回答 2查看 222关注 0票数 0

我正在查看一些SQL代码,并试图找出oracle中count(*)和count(2)之间的区别。

例如

代码语言:javascript
运行
复制
select id_number from person
where type_id = 0010
group by id_number
having count(2) > 1; 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-09 15:21:27

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

count(<expr>)考虑到<expr>的所有非null值。2是一个文字的、非空的值,所以所有行都被考虑在内,就像count(*)一样。

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

我更喜欢count(*),因为它在某种程度上更清楚它所做的事情:组中的每一行都被计数,而不管它包含哪些值。

票数 3
EN

Stack Overflow用户

发布于 2020-10-09 21:44:06

它们的含义是不同的:

  • COUNT(*)计数返回的rows.
  • COUNT(<expr>)计数非空values.

在本例中,您使用的是COUNT(2),其中表达式总是不为空。因此,它将产生与计数行相同的值。

理论上,计算行的速度可能稍微快一些,因为必须将数据计算为当前数据,但不需要进行真正的检查。因此,在计算行数时,引擎不需要物化列值以求表达式,而只需要处理指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64282843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档