MySQL 中的聚合函数

聚合函数都是关于

  • 对表中的单个列的多个行
  • 执行计算
  • 并返回一个单一的值。

ISO标准定义了五个(5)聚合函数,它们分别是:

1) COUNT
2) SUM
3) AVG
4) MIN
5) MAX

为什么使用聚合函数

从业务角度来看,不同的组织层级有不同的信息需求。高层管理者通常对了解总体数字感兴趣,而不一定是具体细节。

聚合函数使我们能够轻松地从数据库中生成汇总数据。

例如,在我们的myflix数据库中,管理层可能需要以下报告:

  • 租借次数最少的电影。
  • 租借次数最多的电影。
  • 每部电影每月平均被租借的次数。

我们可以轻松地使用聚合函数来生成上述报告。

让我们详细了解一下聚合函数。

COUNT函数

COUNT函数返回指定字段中值的总数。它适用于数字和非数字数据类型。所有聚合函数默认在处理数据前会排除NULL值。

COUNT(*)是COUNT函数的一个特殊实现,它返回指定表中所有行的计数。COUNT(*)也考虑Nulls和重复项。

下表显示了电影租赁表中的数据

reference_ number transaction_ date return_date membership_ number movie_id movie_ returned
11 20-06-2012 NULL 1 1 0
12 22-06-2012 25-06-2012 1 2 0
13 22-06-2012 25-06-2012 3 2 0
14 21-06-2012 24-06-2012 2 2 0
15 23-06-2012 NULL 3 3 0

假设我们想知道ID为2的电影被租借的次数。

SELECT COUNT(`movie_id`)  FROM `movierentals` WHERE `movie_id` = 2;

在MySQL workbench中针对myflixdb执行上述查询,我们得到以下结果。

COUNT('movie_id')
3

DISTINCT关键字

DISTINCT Keyword

DISTINCT关键字允许我们从结果中省略重复项。这是通过将相似的值分组来实现的。

为了理解DISTINCT的概念,让我们执行一个简单的查询。

SELECT `movie_id` FROM `movierentals`;

movie_id
1
2
2
2
3

现在让我们使用distinct关键字执行相同的查询 -

SELECT DISTINCT `movie_id` FROM `movierentals`;

如下所示,distinct从结果中省略了重复记录。

movie_id
1
2
3

MIN函数

MIN函数返回指定表字段中的最小值

例如,假设我们想知道我们图书馆中最老电影的发行年份,我们可以使用MySQL的MIN函数来获取所需信息。

以下查询可以帮助我们实现这一目标。

SELECT MIN(`year_released`) FROM `movies`;

在MySQL workbench中针对myflixdb执行上述查询,我们得到以下结果。

MIN('year_released')
2005

MAX函数

正如其名称所示,MAX函数是MIN函数的反面。它从指定的表字段中返回最大值

假设我们想获得数据库中最新电影的发行年份。我们可以轻松地使用MAX函数来实现这一目标。

以下示例返回最新电影的发行年份。

SELECT MAX(`year_released`)  FROM `movies`;

在MySQL workbench中使用myflixdb执行上述查询,我们得到以下结果。

MAX('year_released')
2012

SUM函数

假设我们想要一个报告,该报告显示到目前为止的总付款金额。我们可以使用MySQL的SUM函数,该函数返回指定列中所有值的总和SUM仅适用于数字字段NULL值不包含在返回的结果中。

下表显示了payments表中的数据-

payment_ id membership_ number payment_ date description amount_ paid external_ reference _number
1 1 23-07-2012 电影租赁付款 2500 11
2 1 25-07-2012 电影租赁付款 2000 12
3 3 30-07-2012 电影租赁付款 6000 NULL

下面显示的查询获取所有付款并对它们求和以返回单个结果。

SELECT SUM(`amount_paid`) FROM `payments`;

在MySQL workbench中针对myflixdb执行上述查询,得到以下结果。

SUM('amount_paid')
10500

AVG函数

MySQL AVG函数返回指定列中值的平均值。与SUM函数一样,它仅适用于数字数据类型

假设我们想找到平均付款金额。我们可以使用以下查询 –

SELECT AVG(`amount_paid`)  FROM `payments`;

在MySQL workbench中执行上述查询,我们得到以下结果。

AVG('amount_paid')
3500

脑筋急转弯

你觉得聚合函数很简单。试试这个!

以下示例按姓名对会员进行分组,计算付款总数、平均付款金额和付款总金额。

SELECT m.`full_names`,COUNT(p.`payment_id`) AS  `paymentscount`,AVG(p.`amount_paid`)  AS `averagepaymentamount`,SUM(p.`amount_paid`)  AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;

在MySQL workbench中执行上述示例,我们得到以下结果。

AVG function

摘要

  • MySQL支持所有五个(5)ISO标准聚合函数 COUNT、SUM、AVG、MIN 和 MAX。
  • SUM和AVG函数仅适用于数字数据。
  • 如果要从聚合函数结果中排除重复值,请使用DISTINCT关键字。ALL关键字甚至包括重复项。如果未指定任何内容,则假定ALL为默认值。
  • 聚合函数可以与其他SQL子句结合使用,例如GROUP BY