MySQL AVG

摘要:在本教程中,您将学习如何使用 MySQL AVG()函数计算一组值的平均值。

MySQL AVG()函数简介

MySQL AVG()函数是一个聚合函数,可让您计算一组的平均值。

以下是AVG()函数的基本语法:

AVG(DISTINCT expression)Code language: SQL (Structured Query Language) (sql)

您可以在AVG函数中使用DISTINCT运算符来计算不同值的平均值。

例如,如果您有一组值 1,1,2,3,带有DISTINCT运算符的AVG函数将返回 2,即(1 + 2 + 3) / 3

MySQL AVG()函数示例

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

products table

A) 使用 MySQL AVG()函数计算列示例中所有值的平均值

此示例使用AVG()函数计算products表中所有产品的平均购买价格:

SELECT 
    AVG(buyprice) 'Average Price'
FROM
    products;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG函数——平均产品价格

B) 使用 MySQL AVG()函数和WHERE子句示例

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

SELECT 
    AVG(buyprice) 'Average Classic Cars Price'
FROM
    products
WHERE
    productline = 'Classic Cars';Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG 函数 - 经典汽车平均价格

在此示例中, WHERE子句的条件仅包含 Classic Cars 产品线。因此, AVG()函数仅计算经典汽车中产品的购买价格的平均值。

C) 使用带有DISTINCT选项的 MySQL AVG示例

此查询检查是否有任何具有相同价格的产品:

SELECT 
    COUNT(buyprice) - COUNT(DISTINCT buyprice)
FROM
    products;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG 函数 - COUNT 函数

此查询使用带有DISTINCT选项的AVG()函数来计算不同购买价格的平均值:

SELECT 
    FORMAT(AVG(DISTINCT buyprice), 2)
FROM
    products;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG 函数 - 平均不同产品价格

请注意,结果与不使用DISTINCT运算符的平均购买价格不同。

D) MySQL AVGGROUP BY子句示例

AVG()函数通常与GROUP BY子句结合使用来计算表中每组行的平均值。

例如,要计算每个产品系列的产品平均购买价格,请使用带有GROUP BY子句的AVG()函数,如下查询:

SELECT 
    productline, 
    AVG(buyprice) 'Average Price'
FROM
    products
GROUP BY productline;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG function - average buy price by product line

E) 使用 MySQL AVG()函数和HAVING子句示例

您可以在HAVING子句中使用AVG()函数来设置组平均值的条件。

例如,如果您只想选择产品平均购买价格大于 50 的产品线,则可以使用以下查询:

SELECT 
    productline, 
    AVG(buyprice) 'Average Price'
FROM
    products
GROUP BY productline
HAVING AVG(buyprice) > 50;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG 函数 - 带有 GROUP BY 子句

F) 使用 MySQL AVG()函数和子查询示例

您可以在一条SQL语句中多次使用AVG()函数来计算一组平均值的平均值。

此查询使用AVG()函数计算产品线的平均购买价格的平均购买价格:

SELECT 
    AVG(pl_avg) 'Average Product'
FROM
    (SELECT 
        AVG(buyprice) pl_avg
    FROM
        products
    GROUP BY productline) avgs;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG 函数 - 带子查询示例

怎么运行的。

  • 子查询按产品线计算平均购买价格。
  • 外部查询计算从子查询返回的产品线的平均购买价格的平均购买价格。

G) 使用 MySQL AVG()函数和NULL示例

AVG()函数忽略计算中的NULL值。请参见以下示例:

首先,创建一个名为t的新表,其中包含两列idvalval列可以包含NULL值。

CREATE TABLE IF NOT EXISTS t (
    id INT AUTO_INCREMENT PRIMARY KEY,
    val INT
);Code language: SQL (Structured Query Language) (sql)

其次,向t表中插入一些行,包括NULL值。

INSERT INTO t(val)
VALUES(1),(2),(nulL),(3);Code language: SQL (Structured Query Language) (sql)

第三,使用AVG函数计算val列中的值的平均值:

SELECT 
    AVG(val)
FROM
    t;Code language: SQL (Structured Query Language) (sql)
MySQL AVG 函数 - NULL 示例

该语句按预期返回 2,因为NULL值不包含在AVG函数的计算中。

H) 将 MySQL AVG()函数与控制流函数结合使用

要计算列的平均值并在单个语句中有条件地计算同一列的平均值,请使用AVG()函数和控制流函数,例如IFCASEIFNULLNULLIF

例如,要计算Classic Cars产品线的平均购买价格与所有产品的平均购买价格的比率,请使用以下语句:

SELECT 
    AVG(IF(productline = 'Classic Cars',
        buyprice,
        NULL)) / AVG(buyprice) 'Classic Cars/ Products'
FROM
    products;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL AVG函数-具有控制流功能

如果产品线IF(productline='Classic Cars',buyprice,NULL)表达式返回购买价格,否则NULL Classic Cars

由于AVG()函数忽略计算中的NULL值,因此AVG(IF(productline='Classic Cars',buyprice,NULL))表达式仅返回产品线为Classic Cars的产品的平均购买价格。

在本教程中,您学习了一些使用AVG()函数计算一组值的平均值的有用技术。

本教程有帮助吗?