聚合函数 MySQL

聚合函数的全部内容

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

ISO 标准定义了五 (5) 个聚合函数,即;

1)COUNT
2)总和
3) AVG
4)分钟
5)最大

为何使用聚合函数

从业务角度来看,不同的组织层级有不同的信息需求。高层管理人员通常有兴趣了解整体数字,而不需要了解具体细节。

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

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

  • 租借次数最少的电影。
  • 大多数租借的电影。
  • 每部电影在一个月内租出的平均数量。

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

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

计数功能

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

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

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

参考编号 交易日期 归期 会员号码 电影 ID movie_ 回归
11 20-06-2012 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 3 3 0

假设我们想要获取 id 为 2 的电影的出租次数

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

在以下位置执行上述查询 MySQL 工作台 针对 myflixdb 我们得到了以下结果。

COUNT('movie_id')
3

不同的关键字

不同的关键字

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 针对 myflixdb 的工作台为我们提供了以下结果。

MIN('year_released')
2005

MAX功能

正如名称所示,MAX 函数与 MIN 函数相反。它 返回指定表字段的最大值.

假设我们想获取数据库中最新电影的上映年份。我们可以轻松使用 MAX 函数来实现这一点。

以下示例返回最新上映的电影年份。

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

在以下位置执行上述查询 MySQL 使用 myflixdb 的工作台给了我们以下结果。

MAX('year_released')
2012

SUM功能

假设我们需要一份报告,列出迄今为止支付的总金额。我们可以使用 MySQL SUM 功能 返回指定列中所有值的总和. SUM 仅适用于数字字段. 返回的结果中不包括空值。

下表显示了付款表中的数据-

付款编号 会员号码 付款日期 描述 支付的金额 外部参考编号
1 1 23-07-2012 电影租借付款 2500 11
2 1 25-07-2012 电影租借付款 2000 12
3 3 30-07-2012 电影租借付款 6000

下面显示的查询获取所有付款并将它们加起来以返回单个结果。

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

在以下位置执行上述查询 MySQL 针对 myflixdb 的工作台给出以下结果。

SUM('amount_paid')
10500

AVG function

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

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

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

在以下位置执行上述查询 MySQL 工作台,给出了我们以下结果。

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 工作台给了我们以下结果。

AVG function

总结

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