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