MySQL - 聚合函数
MySQL - 现代聚合函数
Section titled “MySQL - 现代聚合函数”在 SQL 中,聚合函数 (aggregate functions) 对一组行执行计算并返回单个汇总值。这些函数是数据分析和报告的基础。它们通常与 GROUP BY 子句一起使用,以计算各种行子组的聚合值。本教程涵盖了 MySQL 中最常见的聚合函数,包括现代新增功能和最佳实践。
核心聚合函数
Section titled “核心聚合函数”这些是您在大多数查询中会用到的基础聚合函数:
| 函数 | 描述 |
|---|---|
| COUNT() | 计算行数。COUNT(*) 计算所有行,COUNT(column) 计算列中的非 NULL 值,COUNT(DISTINCT column) 计算列中唯一的非 NULL 值。 |
| SUM() | 计算一组数值的总和。 |
| AVG() | 计算一组数值的平均值。 |
| MIN() | 返回一组值中的最小值。 |
| MAX() | 返回一组值中的最大值。 |
| GROUP_CONCAT() | 将组中的值连接成一个字符串,并提供多种排序和分隔符选项。 |
示例:使用核心函数
Section titled “示例:使用核心函数”假设有一个 products 表,其中包含 category(类别)、price(价格)和 stock_quantity(库存数量)列。我们可以为每个类别获取一个汇总信息:
SELECT category, COUNT(*) AS number_of_products, SUM(stock_quantity) AS total_stock, AVG(price) AS average_price, MAX(price) AS most_expensiveFROM productsGROUP BY category;统计函数和位函数
Section titled “统计函数和位函数”MySQL 还提供了用于更高级统计分析和位运算的函数。
| 函数 | 描述 |
|---|---|
| STDDEV_POP() | 计算总体标准差。STD() 和 STDDEV() 是此函数的别名。 |
| STDDEV_SAMP() | 计算样本标准差。 |
| VAR_POP() | 计算总体方差。VARIANCE() 是此函数的别名。 |
| VAR_SAMP() | 计算样本方差。 |
| BIT_AND() | 计算组中所有值的按位与(AND)。 |
| BIT_OR() | 计算组中所有值的按位或(OR)。 |
| BIT_XOR() | 计算组中所有值的按位异或(XOR)。 |
现代 JSON 聚合 (MySQL 5.7+)
Section titled “现代 JSON 聚合 (MySQL 5.7+)”随着 JSON 作为数据交换格式的兴起,MySQL 引入了强大的函数,可以直接将数据聚合到 JSON 结构中。
| 函数 | 描述 |
|---|---|
| JSON_ARRAYAGG() | 将组中的值聚合为一个 JSON 数组。 |
| JSON_OBJECTAGG() | 将组中的键值对聚合为一个 JSON 对象。 |
示例:聚合到 JSON
Section titled “示例:聚合到 JSON”使用相同的 products 表,我们可以按类别将产品名称分组到 JSON 数组中:
SELECT category, JSON_ARRAYAGG(product_name) AS products_in_categoryFROM productsGROUP BY category;高级主题:窗口函数 (MySQL 8.0+)
Section titled “高级主题:窗口函数 (MySQL 8.0+)”尽管不完全是聚合函数,但窗口函数 (Window Functions) 对与当前行相关的表行集执行计算。与聚合函数不同,它们不会折叠行;它们根据 OVER() 子句定义的“窗口”相关行,为每行返回一个值。它们通常与聚合函数一起用于高级报告和分析,例如计算运行总计、排名和移动平均值。
常见的窗口函数包括 ROW_NUMBER()、RANK()、DENSE_RANK()、LEAD()、LAG(),以及用作窗口函数的聚合函数(例如 SUM(...) OVER (...))。掌握聚合函数后,深入了解它们是很好的下一步。