SQL有计数子句
结构化查询语言(Structured Query Language, SQL)是关系数据库查询和交互的基础。如何使用SQL数据库在很大程度上取决于应用程序的需求。
但是,有一点没有改变,那就是需要过滤出匹配结果的数据。一个常见的任务是根据特定条件聚合和过滤结果。SQL知道这一点,并为我们提供了HAVING子句和COUNT函数,它们可以帮助我们完成这些任务。
在本指南中,我们将引导您了解如何将SQL中的HAVING子句与COUNT()函数结合起来。
SQL HAVING子句和COUNT()函数
在SQL中,我们使用HAVING子句根据特定条件过滤GROUP BY查询的结果。我们主要将它与COUNT、SUM、AVG和MAX等聚合函数结合使用,以过滤符合特定标准的行组。
另一方面,COUNT函数允许我们计算组中的行数。
语法:
下面表达了with()子句与COUNT()函数的语法:
SELECT column1, column2, aggregate_function(column) AS alias
从表
GROUP BY column1, column2
aggregate_function(列)
在给定的示例中,我们使用HAVING子句应用条件来过滤组。然后指定聚合函数,在本例中是count()函数,其中包含我们希望进行过滤的列。
例子:
让我们探索一些关于如何将HAVING子句与COUNT()函数结合使用的实际示例。
出于演示目的,我们使用Sakila示例数据库,它可以免费下载并用于MySQL和PostgreSQL。
您可以随意使用您认为适用于此上下文的任何数据集。
示例1:
让我们假设一个场景,我们需要找到包含超过10部电影的电影类别。我们可以使用HAVING COUNT子句,如下所示:
选择
category.name,
COUNT(film.film_id) AS total_movies
从
类别
加入film_category ON
类别。Category_id = film_category.category_id
加入影片
film_category。Film_id = film.film_id
集团
category.name
有
COUNT(film.film_id) > 10;
在给定的示例查询中,我们首先选择类别名称,然后使用count()函数计算每个类别中的电影数量。
然后使用GROUP BY子句根据类别名称对结果进行分组。
最后,我们使用HAVING子句过滤掉电影计数大于10的类别。
结果表如下:
名字| total_films |
-----------+-----------+
动作| 64|
动画| 66|
儿童| 60|
经典| 57|
喜剧| 58|
纪录片 | 68 |
电视剧| 62|
家庭| 69|
国外| 73|
比赛| 61|
恐怖| 56|
音乐| 51|
新| 63|
科幻| 61|
体育| 74|
旅行| 57|
这将显示每个类别中的电影数量。
示例2:
假设我们要找到没有在任何电影中出现过的演员。我们可以像下面这样使用左连接和HAVING COUNT子句:
选择
actor.actor_id,
actor.first_name,
actor.last_name
从
演员
左加入film_actor
演员。Actor_id = film_actor.actor_id
集团
actor.actor_id,
actor.first_name,
actor.last_name
有
COUNT(film_actor.actor_id) = 0;
该查询过滤掉数据库中演员没有影片的结果。
结论
在本文中,您学习了如何将HAVING子句与SQL聚合函数COUNT()结合使用,以过滤出匹配特定条件的结果。我们使用各种布尔运算符,如大于、小于等来指定各种条件。