在SQL中选择Count Distinct
在使用SQL时,您一定会遇到需要计算给定表中的行数的实例。例如,如果您正在处理没有编号ID的记录,则需要使用其他方法来确定总行数。
幸运的是,我们可以访问SQL COUNT()函数,它在帮助我们确定表中的行数或给定查询的结果集方面起着至关重要的作用。
在本指南中,我们将深入研究如何使用count()函数对给定表或结果集中的行数进行计数的各种用法和示例。
要求:
在深入研究查询和示例之前,最好确保我们有需求。对于这篇文章,我们将使用以下内容:
- MySQL数据库版本8.0
- MySQL Sakila样例数据库
您可以参考文档或查看我们的教程,了解如何在服务器上安装和设置Sakila示例数据库。
注意:你也可以使用任何你想要的数据集。本文讨论的方法将适用于所有方法。
SQL Count命令功能
如前所述,我们使用COUNT()函数来确定表或查询结果集中的行数。我们可以将函数语法表示如下:
计数(表达)
这里,表达式引用了一个可选参数,该参数指定要计数的内容。我们可以提供以下参数:
- * -告诉函数对表或结果集中的所有行进行计数。
- column_name—统计指定列中非空值的个数。
- 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 |
结论
本教程探讨了count()函数,用于计算给定表或结果集中的行数。我们还关注count distinct,以计算给定表或结果集中的唯一行数。