Navicat 博客

根据平均值列出记录 2020 年 2 月 5 日,由 Robert Gravelle 撰写

AANSI SQL包括几个聚合函数,使您可以对一组值进行计算以将其结果作为单个值返回。他们包括Count(), Min(), Max(), Sum() and AVG(),以及其他。默认情况下,聚合函数适用于所有行,但是您可以通过将WHERE子句应用于SELECT语句来缩小字段的范围。此外,您可以使用其他一些技术有条件地选择某些行,我们将在今天使用 Navicat Premium探索这些技术。这些包括使用CASE语句以及GROUP BY子句。 我们将这些技术应用于AVG()函数,但它们将与所有聚合函数同样有效。

使用AVG() 函数

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视频租赁商店的各个电影的信息。 列包括标题,描述,运行时间,租金,等级和其他。

film_columns (154K)

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

auto_complete (46K)

使用CASE语句

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

pg_avg (61K)

上面的查询显示了所有电影的总数量,没有PG评级的电影的数量,以及所有电影和具有PG评级的电影的平均租金。 使用CONCAT()和FORMAT()函数将rental_rate显示为货币。

使用GROUP BY子句

将AVG()仅应用于某些行的另一种方法是使用GROUP BY。 它根据选定的列汇总结果。 因此,按等级对结果进行分组将列出每个等级的平均rental_rate:

group_by (55K)

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

group_by_with_where_and_having (60K)

总结

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

查询是在Navicat Premium 15中执行的。它添加了100多个增强功能,并包括几个新功能,可为您提供比以往更多的构建,管理和维护数据库的方式!

Navicat 文章
频道条目
分享
文章归档