MySQL Aggregate Functions

摘要:在本教程中,您将了解 MySQL 聚合函数,包括AVG COUNTSUMMAXMIN.

MySQL聚合函数简介

聚合函数对多个值执行计算并返回单个值。

例如,您可以使用AVG()聚合函数,该函数接受多个数字并返回这些数字的平均值。

下面说明了聚合函数的语法:

function_name(DISTINCT | ALL expression)
Code language: SQL (Structured Query Language) (sql)

在这个语法中:

  • 首先,指定聚合函数的名称,例如AVG() 。请参阅下一节中的聚合函数列表。
  • 其次,如果您想基于不同值进行计算,请使用DISTINCT ;如果您想计算所有值(包括重复值),请使用ALL 。默认为ALL
  • 第三,指定一个表达式,可以是列或涉及列和算术运算符的表达式。

聚合函数通常与GROUP BY子句一起使用来计算每个组的聚合值,例如该组的平均值或每个组中值的总和。

下图说明了SUM()聚合函数与GROUP BY子句结合使用:

MySQL Aggregate Function

MySQL 支持以下聚合函数:

聚合函数描述
平均值()返回非 NULL 值的平均值。
位与()返回按位与。
位或()返回按位或。
位异或()返回按位异或。
数数()返回组中的行数,包括具有 NULL 值的行。
GROUP_CONCAT()返回一个连接字符串。
JSON_ARRAYAGG()以单个 JSON 数组的形式返回结果集。
JSON_OBJECTAGG()将结果集作为单个 JSON 对象返回。
最大限度()返回一组非 NULL 值中的最高值(最大值)。
最小值()返回一组非 NULL 值中的最低值(最小值)。
标准偏差()返回总体标准差。
STDDEV_POP()返回总体标准差。
STDDEV_SAMP()返回样本标准差。
和()返回一组所有非 NULL 值的总和。
VAR_POP()返回总体标准方差。
VARP_SAM()返回样本方差。
方差()返回总体标准方差。

MySQL 聚合函数示例

我们将使用示例数据库中的productsorderdetails表进行演示:

产品订单明细表

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)

试试看

MySQL 聚合函数 - AVG 示例

以下示例使用AVG()函数计算每个产品线的平均购买价格:

SELECT 
    productLine, 
    AVG(buyPrice)
FROM
    products
GROUP BY productLine
ORDER BY productLine;
Code language: SQL (Structured Query Language) (sql)

试试看

MySQL 聚合函数 - AVG 与 GROUP BY 示例

MySQL 聚合函数 – COUNT()函数示例

COUNT()函数返回集合中值的数量。

例如,您可以使用COUNT()函数获取products表中的产品数量,如以下查询所示:

SELECT 
    COUNT(*) AS total
FROM 
    products;Code language: PHP (php)

试试看

MySQL 聚合函数 - COUNT 示例

以下语句使用COUNT()函数和GROUP BY子句来获取每个产品系列的产品数量:

SELECT 
    productLine, 
    COUNT(*)
FROM
    products
GROUP BY productLine
ORDER BY productLine;
Code language: SQL (Structured Query Language) (sql)

试试看

MySQL 聚合函数 - 使用 GROUP BY 进行 COUNT 示例

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)

试试看

MySQL 聚合函数 - SUM 示例

要更详细地查看结果,您可以将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 聚合函数 - SUM 和 JOIN 示例

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)

试试看

MySQL 聚合函数 - MAX 示例

以下语句使用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 聚合函数 - MAX 和 GROUP BY 示例

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)

试试看

MySQL 聚合函数 - MIN 示例

以下示例使用MIN()函数和GROUP BY子句来获取每个产品系列的最低价格:

SELECT 
    productLine, 
    MIN(buyPrice)
FROM
    products
GROUP BY productLine
ORDER BY MIN(buyPrice);Code language: SQL (Structured Query Language) (sql)

试试看

MySQL 聚合函数 - MIN 和 GROUP BY 示例

MySQL 聚合函数 – GROUP_CONCAT()函数示例

GROUP_CONCAT()连接一组字符串并返回连接后的字符串。请参阅以下employeescustomers表:

以下语句使用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 聚合函数 - GROUP_CONCAT 示例

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