除了获取个别值之外,SELECT 语句还能够基于一个或多个列聚合数据元素。Navicat 查询创建工具的这篇文章将介绍如何在查询中使用原生 SQL 聚合函数以显示列的统计信息。
关于 Sakila 示例数据库
与前几篇文章一样,我们今天将在此处构建的查询将在 Sakila 示例数据库Sakila 示例数据库运行。它包含许多以电影业为主题的表,涵盖从演员和电影制片厂到影碟出租店的所有内容。有关下载和安装 Sakila 数据库的说明,请参阅 Generating Reports on MySQL Data(生成 MySQL 数据报表)教程。
使用聚合函数
在 SQL 中,输出字段可以传递给聚合函数以生成列数据的统计信息。聚合函数包括 COUNT、MAX、MIN、SUM 和 AVG:
- COUNT():返回指定字段中包含非 NULL 值的行数。
- SUM():返回指定字段中非 NULL 值的总和。
- AVG():返回指定字段中非 NULL 值的平均值。
- MIN():返回指定字段中非 NULL 值的最小值。
- MAX():返回指定字段中非 NULL 值的最大值。
如第 2 部分所述,点击 Navicat 查询创建工具中输出字段左侧的 <func>修饰符可打开 SUM、MAX、MIX、AVG 和 COUNT 聚合函数的列表。从列表中选择所需的函数会将其插入到查询中:
这是一个使用聚合函数显示电影数量、平均电影长度、电影总长度以及最低和最高出租率的查询:
设置分组准则
以上的结果与整个表相关的。你也可以使用 GROUP BY 子句按一列或多列对记录进行分组。
让我们设计一个查询,按月显示租借电影的数量。在查询创建工具中执行以下步骤︰
- 将 film 和 rental 表拖到编辑器中。
- 将 film.film_id 字段拖到 rental.inventory_id 字段上以联接两个表。
- 添加一个输出字段。在编辑器中,输入“MONTHNAME(rental_date)”。
- 点击 <Alias> 标签,然后输入“rental_month”值。
- 添加第二个字段。这次,从字段列表中选择 rental_id。
- 点击 <Func> 标签,然后从列表中选择 COUNT。
- 点击 <Alias> 标签,然后输入别名“rental_count”。
- 点击 <按这里添加 GROUP BY> 标签,然后使用编辑器输入“MONTH(rental_date)”。
查询创建工具现在应该如下所示:
- 点击“确定”关闭“查询创建工具”并返回“查询编辑器”。
运行查询以查看结果:
请留意如何在 rental_month 输出字段上应用 MONTHNAME 函数显示完整的月份名称而不是 MONTH() 函数返回的数字。无论如何,可以使用任何一种函数对结果按月份进行分组。