【count(列名)、count(1)和 count(星号)有什么区别】

本文涉及的产品
简介: 【count(列名)、count(1)和 count(星号)有什么区别】

在 SQL 数据库中, count() 函数是用于计算记录数的聚合函数之一。该函数可以根据需要接受一个或多个参数。在本文中,我们将关注 count() 函数的三种不同用法,即 count(列名)count(1)count(*),并且深入研究它们之间的区别。

count(列名)

语法:count(column_name)

count(列名) 函数返回指定列中非空值的行数。例如,如果我们有一个名为 orders 的表,并且要计算 order_id 列中非空值的总数,则可以使用以下语句:

SELECT COUNT(order_id) AS non_null_orders
FROM orders;

在上面的语句中,count() 函数计算 order_id 列中非空值的行数,并且使用 AS关键字将结果重命名为 non_null_orders

此函数的优点在于它只对指定的列进行计数。这意味着在计算结果时,它会忽略包含空值的行。此外,它只计数包含非空值的行,从而减少了计算时间。

但是,这种用法有一个明显的缺点,即它不能计算相应列的总行数,因为它不会包括空值的行。此外,它也不能计算多列的总行数,因为在每个 count() 函数中只能指定单个列。

count(1)

语法:count(1)

count(1) 函数返回表中的所有行数,无论是否存在空值。例如,如果我们要计算表 orders 的行数,则可以使用以下语句:

SELECT COUNT(1) AS row_count
FROM orders;

在上面的语句中,count(1) 函数计算 orders 表中的总行数,并将其重命名为 row_count

这种用法的优点在于它可以计算表中所有行的总数,无论这些行是否包含空值。此外,它可以轻松地计算多个列的总行数。

但是,这种用法的缺点在于它可能需要查询整个表,这可能会导致性能问题,尤其是在大型表中。另外,由于它只返回行数,它不提供关于表中特定列的任何信息。

count(*)

语法:count(*)

count(*) 函数是一种特殊的 count() 函数,它用于计算表中的所有行数,无论这些行是否包含空值。例如,如果我们要计算表 orders 的行数,则可以使用以下语句:

SELECT COUNT(*) AS row_count
FROM orders;

在上面的语句中,count(*) 函数计算 orders 表中的总行数,并将其重命名为 row_count

这种用法的优点与 count(1) 相同,可以计算表中所有行的总数,无论这些行是否包含空值。此外,它可以轻松地计算多个列的总行数。

不同之处在于它是通过查询表中的所有列来计算行数的,这意味着它可以提供有关表中所有列的统计信息。此外,这种用法可以更快地计算行数,因为它不需要对指定的列进行计数,而是仅计算行数。

count(列名) vs count(1) vs count(*)

现在,我们已经了解了 count() 函数的三种不同用法,让我们更详细地比较它们之间的区别。

1. 计算非空行数 vs 计算所有行数

count(列名) 函数和 count(*) 函数都可以计算表中所有行的总数,包括空值。与之相反,count(1) 函数不考虑空值,只计算非空行的总数。

2. 计算指定列的行数 vs 计算所有列的行数

count(列名) 函数只计算指定列的行数,而 count(1)count(*) 函数计算所有列的行数。这意味着如果你只需要计算特定列的行数,则可以使用 count(列名) 函数,而如果你需要计算所有列的行数,则应该使用 count(1)count(*) 函数。

3. 性能

由于 count(1)count(*) 函数计算表中所有行的总数,因此它们可能比 count(列名) 函数更慢。另外,由于 count(*) 函数查询所有列,因此可能需要更多的计算资源。

4. 关联查询

在涉及关联查询的情况下,count(列名)count(1) 函数可能会返回不正确的结果,因为它们只考虑指定的列或行。与之相反,count(*) 函数可以正确计算关联查询中的所有行数。

5. 返回结果

count(列名) 函数返回指定列中非空值的行数。count(1)count(*) 函数返回表中的所有行数。由于 count(*) 函数查询所有列,因此它可以提供有关表中所有列的统计信息。

总结

在本文中,我们介绍了 count() 函数的三种不同用法,即 count(列名)count(1)count(*)。我们将它们之间的区别归纳如下:

  • count(列名) 函数返回指定列中非空值的行数。
  • count(1) 函数返回表中的所有行数,无论是否存在空值。
  • count(*) 函数用于计算表中的所有行数,无论这些行是否包含空值。

这三种用法都有各自的优缺点。如果你只需要计算特定列的行数,则可以使用 count(列名) 函数。如果你需要计算所有列的行数,则应该使用 count(1)count(*) 函数。另外,由于 count(1)count(*) 函数计算表中所有行的总数,因此它们可能比 count(列名) 函数更慢。在涉及关联查询的情况下,count(列名)count(1) 函数可能会返回不正确的结果,因为它们只考虑指定的列或行。与之相反,count(*) 函数可以正确计算关联查询中的所有行数。

因此,在使用 count() 函数时,我们需要根据实际情况选择不同的用法,以提高查询性能并获得准确的结果。


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
SQL 缓存 Oracle
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
本文介绍了COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。
11694 0
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
|
18天前
|
数据库
count(1)、count(*)、count(column)的含义、区别、执行效率
总之,`count(1)` 和 `count(*)` 通常会更常用,因为它们的执行效率较高,不涉及对具体列值的处理。而 `count(column)` 适用于统计特定列中的非空值数量。在实际使用时,可以根据情况选择适合的方式。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
12 0
|
6月前
|
存储 SQL 关系型数据库
count(1)、count(具体字段)和count(*)究竟有什么区别?
count(1)、count(具体字段)和count(*)究竟有什么区别?
58 0
|
9月前
|
SQL 数据可视化 关系型数据库
count(列名) ,count(1)与count(*) 有何区别?
count(列名) ,count(1)与count(*) 有何区别?
|
10月前
|
关系型数据库 MySQL 索引
【MySQL】count(1)、count(*)、count(字段)、count(主键)的区别
【MySQL】count(1)、count(*)、count(字段)、count(主键)的区别
163 0
|
11月前
|
SQL 索引
Count(1) Count(0) Count(*) Count(列名)
Count(1) Count(0) Count(*) Count(列名)
112 0
|
11月前
|
存储 关系型数据库 MySQL
MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析
MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析
114 0
MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析
|
存储 SQL 架构师
性能大PK count(*)、count(1)和count(列)
最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,聊到了以下内容: 数据统计你怎么能用 count(*) 统计数据呢,count(*) 太慢了,要是把数据库搞垮了那不就完了么,赶紧改用 count(1),这样比较快...... 有点儿好奇,难道 count(1) 的性能真的就比 count(*) 要好吗? 印象中网上有很多的文章都有过类似问题的讨论,那 MySQL 统计数据总数 count(*) 、count(1)和count(列名) 哪个性能更优呢?今天我们就来聊一聊这个问题。
性能大PK count(*)、count(1)和count(列)
|
SQL 关系型数据库 MySQL
MySQL - count(1)、count(*)、count(列名) 执行区别
MySQL - count(1)、count(*)、count(列名) 执行区别
110 0