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()结合使用,以过滤出匹配特定条件的结果。我们使用各种布尔运算符,如大于、小于等来指定各种条件。