AANSI SQL包括几个聚合函数,使您可以对一组值进行计算以将其结果作为单个值返回。他们包括Count(), Min(), Max(), Sum() and AVG(),以及其他。默认情况下,聚合函数适用于所有行,但是您可以通过将WHERE子句应用于SELECT语句来缩小字段的范围。此外,您可以使用其他一些技术有条件地选择某些行,我们将在今天使用 Navicat Premium 探索这些技术。这些包括使用CASE语句以及GROUP BY子句。 我们将这些技术应用于AVG()函数,但它们将与所有聚合函数同样有效。
如果你还没有使用过 Navicat Premium,可点击这里下载14天免费全功能试用版。
使用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视频租赁商店的各个电影的信息。 列包括标题,描述,运行时间,租金,等级和其他。
我们可以使用AVG()函数确定所有电影的平均租赁成本,如下所示:
使用CASE语句
AVG()函数接受一个表达式。 因此,它可以是列名,但是可以是任何有效表达式。 因此,我们可以通过将CASE语句作为参数传递给AVG()函数来有条件地应用AVG()函数。 我们可以使用CASE语句确定仅具有PG评级的电影的平均rental_rate,如下所示:
上面的查询显示了所有电影的总数量,没有PG评级的电影的数量,以及所有电影和具有PG评级的电影的平均租金。 使用CONCAT()和FORMAT()函数将rental_rate显示为货币。
使用GROUP BY子句
将AVG()仅应用于某些行的另一种方法是使用GROUP BY。 它根据选定的列汇总结果。 因此,按等级对结果进行分组将列出每个等级的平均rental_rate:
我们可以使用WHERE和/或HAVING子句来缩小选择的行的范围。 两者都可以单独或串联使用。 例如,下一个查询选择language_id为1(英语)的电影,其评分总数少于200:
总结
在今天的博客中,我们使用CASE语句和GROUP BY子句有条件地基于平均值列出电影记录。
往期回顾
1. 盗版引发设备瘫痪 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件
2. Navicat 荣获 Microsoft 金牌合作伙伴
3. Navicat 16.3 正式支持 OceanBase 企业版
4. 免费试用 Navicat 16
5. Navicat 发展史
6. SQL 语句中 WHERE 1=1 的作用
7. 在 SQL 中计算总行数的百分比
8. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium