摘要:在本教程中,您将了解 MySQL 聚合函数,包括AVG
COUNT
、 SUM
、 MAX
和MIN.
MySQL聚合函数简介
聚合函数对多个值执行计算并返回单个值。
例如,您可以使用AVG()
聚合函数,该函数接受多个数字并返回这些数字的平均值。
下面说明了聚合函数的语法:
function_name(DISTINCT | ALL expression)
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,指定聚合函数的名称,例如
AVG()
。请参阅下一节中的聚合函数列表。 - 其次,如果您想基于不同值进行计算,请使用
DISTINCT
;如果您想计算所有值(包括重复值),请使用ALL
。默认为ALL
。 - 第三,指定一个表达式,可以是列或涉及列和算术运算符的表达式。
聚合函数通常与GROUP BY
子句一起使用来计算每个组的聚合值,例如该组的平均值或每个组中值的总和。
下图说明了SUM()
聚合函数与GROUP BY
子句结合使用:

MySQL 支持以下聚合函数:
聚合函数 | 描述 |
---|---|
平均值() | 返回非 NULL 值的平均值。 |
位与() | 返回按位与。 |
位或() | 返回按位或。 |
位异或() | 返回按位异或。 |
数数() | 返回组中的行数,包括具有 NULL 值的行。 |
GROUP_CONCAT() | 返回一个连接字符串。 |
JSON_ARRAYAGG() | 以单个 JSON 数组的形式返回结果集。 |
JSON_OBJECTAGG() | 将结果集作为单个 JSON 对象返回。 |
最大限度() | 返回一组非 NULL 值中的最高值(最大值)。 |
最小值() | 返回一组非 NULL 值中的最低值(最小值)。 |
标准偏差() | 返回总体标准差。 |
STDDEV_POP() | 返回总体标准差。 |
STDDEV_SAMP() | 返回样本标准差。 |
和() | 返回一组所有非 NULL 值的总和。 |
VAR_POP() | 返回总体标准方差。 |
VARP_SAM() | 返回样本方差。 |
方差() | 返回总体标准方差。 |
MySQL 聚合函数示例
我们将使用示例数据库中的products
和orderdetails
表进行演示:

MySQL 聚合函数 – AVG()
函数示例
AVG()
函数计算一组值的平均值。它在计算中忽略 NULL。
AVG(expression)
Code language: SQL (Structured Query Language) (sql)
例如,您可以使用AVG
函数通过以下查询计算products
表中所有产品的平均购买价格:
SELECT
AVG(buyPrice) average_buy_price
FROM
products;
Code language: SQL (Structured Query Language) (sql)

以下示例使用AVG()
函数计算每个产品线的平均购买价格:
SELECT
productLine,
AVG(buyPrice)
FROM
products
GROUP BY productLine
ORDER BY productLine;
Code language: SQL (Structured Query Language) (sql)

MySQL 聚合函数 – COUNT()
函数示例
COUNT()
函数返回集合中值的数量。
例如,您可以使用COUNT()
函数获取products
表中的产品数量,如以下查询所示:
SELECT
COUNT(*) AS total
FROM
products;
Code language: PHP (php)

以下语句使用COUNT()
函数和GROUP BY
子句来获取每个产品系列的产品数量:
SELECT
productLine,
COUNT(*)
FROM
products
GROUP BY productLine
ORDER BY productLine;
Code language: SQL (Structured Query Language) (sql)

MySQL 聚合函数 – SUM()
函数示例
SUM()
函数返回集合中值的总和。 SUM()
函数忽略NULL
。如果没有找到匹配的行, SUM()
函数将返回 NULL。
要获取每个产品的总订单价值,您可以将SUM()
函数与GROUP BY
子句结合使用,如下所示:
SELECT
productCode,
SUM(priceEach * quantityOrdered) total
FROM
orderDetails
GROUP BY productCode
ORDER BY total DESC;
Code language: SQL (Structured Query Language) (sql)

要更详细地查看结果,您可以将orderdetails
表连接到products
表,如以下查询所示:
SELECT
productCode,
productName,
SUM(priceEach * quantityOrdered) total
FROM
orderDetails
INNER JOIN
products USING (productCode)
GROUP BY productCode
ORDER BY total;
Code language: SQL (Structured Query Language) (sql)

MySQL 聚合函数 – MAX()
函数示例
MAX()
函数返回集合中的最大值。
MAX(expression)
Code language: SQL (Structured Query Language) (sql)
例如,您可以使用MAX()
函数从products
表中获取最高购买价格,如以下查询所示:
SELECT
MAX(buyPrice) highest_price
FROM
products;
Code language: SQL (Structured Query Language) (sql)

以下语句使用MAX()
函数和GROUP BY
子句来获取每个产品系列的最高价格:
SELECT
productLine, MAX(buyPrice)
FROM
products
GROUP BY productLine
ORDER BY MAX(buyPrice) DESC;
Code language: SQL (Structured Query Language) (sql)

MySQL 聚合函数 – MIN()
函数示例
MIN()
函数返回一组值中的最小值。
MIN(expression)
Code language: SQL (Structured Query Language) (sql)
例如,以下查询使用MIN()
函数从products
表中查找最低价格:
SELECT
MIN(buyPrice) lowest_price
FROM
products;
Code language: SQL (Structured Query Language) (sql)

以下示例使用MIN()
函数和GROUP BY
子句来获取每个产品系列的最低价格:
SELECT
productLine,
MIN(buyPrice)
FROM
products
GROUP BY productLine
ORDER BY MIN(buyPrice);
Code language: SQL (Structured Query Language) (sql)

MySQL 聚合函数 – GROUP_CONCAT()
函数示例
GROUP_CONCAT()
连接一组字符串并返回连接后的字符串。请参阅以下employees
和customers
表:

以下语句使用GROUP_CONCAT()
函数返回销售人员以及每个销售人员负责的客户列表:
SELECT
firstName,
lastName,
GROUP_CONCAT(
DISTINCT customername
ORDER BY customerName) customers
FROM
employees
INNER JOIN customers
ON customers.salesRepEmployeeNumber = employeeNumber
GROUP BY employeeNumber
ORDER BY firstName , lastname;
Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何使用最常用的 MySQL 聚合函数。