统计SQL中的行数

在使用SQL时,您一定会遇到需要计算给定表中的行数的实例。例如,如果您正在处理没有编号ID的记录,则需要使用其他方法来确定总行数。

幸运的是,我们可以访问SQL COUNT()函数,它在帮助我们确定表中的行数或给定查询的结果集方面起着至关重要的作用。

在本指南中,我们将深入研究如何使用count()函数对给定表或结果集中的行数进行计数的各种用法和示例。

要求:

在深入研究查询和示例之前,最好确保我们有需求。对于这篇文章,我们使用以下方法:

  1. MySQL数据库版本8.0
  2. MySQL Sakila样例数据库

您可以参考文档或查看我们的教程,了解如何在服务器上安装和设置Sakila示例数据库。

注意:你也可以使用任何你想要的数据集。本文讨论的方法将适用于所有方法。

SQL Count命令功能

如前所述,我们使用COUNT()函数来确定表或查询结果集中的行数。我们可以将函数语法表示如下:

计数(表达)

这里,表达式引用了一个可选参数,该参数指定要计数的内容。我们可以提供以下参数:

  1. * -告诉函数对表或结果集中的所有行进行计数。
  2. column_name—统计指定列中非空值的个数。
  3. DISTINCT column_name—统计指定列中不同的非空值的个数。

例1:计算所有行

COUNT()函数最简单的用法是对给定表中的所有行进行计数。

以下面的查询为例,它演示了如何使用这个函数来确定Sakila样本数据库中“film”表的行数:

SELECT COUNT(*) AS total_movies

从电影;

这将计数并返回指定表中记录的总数。使用示例输出如下:

total_films |

-----------+

1000 |

例2:条件计数

该函数还允许我们指定给定的布尔条件。这将返回与该特定条件匹配的行的总数。

以Sakila数据库中的“film”表为例。假设我们希望确定评级为“R”的电影的数量。

我们可以运行如下查询:

SELECT COUNT(*) AS total_rated_r_films

从电影

WHERE rating = 'R';

在本例中,我们使用WHERE子句添加一个条件。这应该只过滤匹配的记录,并将结果集传递给count()函数。

使用示例输出如下:

total_rated_r_films |

-------------------+

195 |

例3:计算不同值

假设您希望在不进行不必要的连接和过滤的情况下计算给定列中唯一值的数量。您可以使用count()函数并将DISTINCT子句作为参数传递。

示例用法如下:

SELECT COUNT(DISTINCT rating) AS unique_ratings

从电影;

这将返回唯一电影评级的数量。

输出:

unique_ratings |

--------------+

5 |

例4:统计join表中的行数(高级)

在其他情况下,您可能需要计算表连接中的行数。虽然一开始看起来很复杂,但使用一些查询格式,您可以使用count函数在一条语句中完成此任务。

例如,假设我们希望计算每个客户租用的电影数量。我们可以运行如下查询:

SELECT c.customer_id, c.first_name, c.last_name, COUNT(r.rental_id)作为total_rentals

来自客户AS c

LEFT JOIN rental AS r ON c.customer_id = r.customer_id

GROUP BY c.customer_id, c.first_name, c.last_name

ORDER BY total_rentals;

在给定的示例中,我们对客户和租赁表使用LEFT JOIN。这将客户与他们的电影租赁联系起来。

然后使用count()函数确定每个客户的租赁次数。

我们还使用GROUP BY子句按客户对结果集进行分组,并从最高到最低(降序)对总租金进行排序。

结果输出如下:

Customer_id |first_name |last_name |total_rentals|

-----------+-----------+------------+-------------+

埃莉诺;亨特;46

526|卡尔|海豹| 45|

克拉拉·肖[42]

玛西娅|迪恩| 42|

塔米·桑德斯[41]

韦斯利;布尔

苏·彼得斯

[qh]朗达·肯尼迪

178|马里昂|斯奈德| 39|

[qh]蒂姆·凯里[39]

伊丽莎白·布朗38岁

tommy collazo [38]

黛西;贝茨;38

柯蒂斯伊尔比38

176| june | carroll | 37|

埃尔西;凯利;37

玛莎;道格拉斯

366|布兰登|休伊| 37|

结论

在本教程中,我们向您介绍了如何使用SQL中的count()函数来确定给定表中的行数。