如果你还没有使用过 Navicat Premium,可点击这里下载14天免费全功能试用版。
AVG()函数返回一个给定表达式的平均值。 如果该函数找不到匹配的行,则返回NULL。 我们将针对Sakila示例数据库 运行查询。 它最初是为MySQL开发的,但此后已移植到大多数流行的DBMS。Navicat Premium是理想的数据库客户端,因为它支持从MySQL,MariaDB,MongoDB,SQL Server,Oracle,PostgreSQL到SQLite的所有内容。此外,它还与Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google Cloud和MongoDB Atlas等云数据库兼容。
film表存储有关虚构的Sakila视频租赁商店的各个电影的信息。 列包括标题,描述,运行时间,租金,等级和其他。

我们可以使用AVG()函数确定所有电影的平均租赁成本,如下所示:

AVG()函数接受一个表达式。 因此,它可以是列名,但是可以是任何有效表达式。 因此,我们可以通过将CASE语句作为参数传递给AVG()函数来有条件地应用AVG()函数。 我们可以使用CASE语句确定仅具有PG评级的电影的平均rental_rate,如下所示:

上面的查询显示了所有电影的总数量,没有PG评级的电影的数量,以及所有电影和具有PG评级的电影的平均租金。 使用CONCAT()和FORMAT()函数将rental_rate显示为货币。
将AVG()仅应用于某些行的另一种方法是使用GROUP BY。 它根据选定的列汇总结果。 因此,按等级对结果进行分组将列出每个等级的平均rental_rate:

我们可以使用WHERE和/或HAVING子句来缩小选择的行的范围。 两者都可以单独或串联使用。 例如,下一个查询选择language_id为1(英语)的电影,其评分总数少于200:

在今天的博客中,我们使用CASE语句和GROUP BY子句有条件地基于平均值列出电影记录。