当前位置: 首页 > MySQL数据库

mysql中如何求平均值

时间:2026-01-28 14:10:09

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

在mysql中,可以利用AVG()函数来求平均值。

MySQL AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值。

AVG() 函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

AVG()函数的语法如下:

SELECT AVG(column_name) FROM table_name;

AVG()函数中还可添加DISTINCT运算符来计算不同值的平均值。 例如,如果您有一组值1123,具有DISTINCT操作的AVG()函数将返回不同值的和,即:(1 + 2 + 3)/3 = 2.00

MySQL AVG示例

我们将在示例数据库中使用products表进行演示,下图是products表的结构 -

mysql> desc products;+--------------------+---------------+------+-----+---------+------------------+| Field              | Type          | Null | Key | Default | Extra            |+--------------------+---------------+------+-----+---------+------------------+| productCode        | varchar(15)   | NO   | PRI |         |                  || productName        | varchar(70)   | NO   | MUL | NULL    |                  || productLine        | varchar(50)   | NO   | MUL | NULL    |                  || productScale       | varchar(10)   | NO   |     | NULL    |                  || productVendor      | varchar(50)   | NO   |     | NULL    |                  || productDescription | text          | NO   |     | NULL    |                  || quantityInStock    | smallint(6)   | NO   |     | NULL    |                  || buyPrice           | decimal(10,2) | NO   |     | NULL    |                  || MSRP               | decimal(10,2) | NO   |     | NULL    |                  || stockValue         | double        | YES  |     | NULL    | STORED GENERATED |+--------------------+---------------+------+-----+---------+------------------+10 rows in set

要计算products表中所有产品的平均价格,可以使用AVG函数,如下查询:

SELECT AVG(buyprice) 'Avarage Price' FROM products;

执行上面查询语句,得到以下结果 -

mysql> SELECT AVG(buyprice) 'Avarage Price' FROM products;+---------------+| Avarage Price |+---------------+| 54.395182     |+---------------+1 row in set

请注意,FORMAT函数用于格式化AVG函数返回的平均值。

您可以向SELECT语句添加一个WHERE子句来计算子集值的平均值。 例如,要计算产品线为Classic Cars的产品的平均价格,您可以使用以下查询:

SELECT AVG(buyprice) 'Avarage Classic Cars Price'FROM productsWHERE productline = 'Classic Cars';

执行上面查询语句,得到以下结果 -

mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price'FROM productsWHERE productline = 'Classic Cars';+----------------------------+| Avarage Classic Cars Price |+----------------------------+| 64.446316                  |+----------------------------+1 row in set

具有DISTINCT的MySQL AVG()函数

有些产品价格相同,可以使用以下查询来检查它:

SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;

执行上面查询语句,得到以下结果 -

mysql> SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;+--------------------------------------------+| COUNT(buyprice) - COUNT(DISTINCT buyprice) |+--------------------------------------------+|                                          2 |+--------------------------------------------+1 row in set

可以使用AVG()函数通过添加DISTINCT运算符来计算不同价格的平均值,如下所示:

SELECT AVG(DISTINCT buyprice) FROM products;

执行上面查询语句,得到以下结果 -

mysql> SELECT AVG(DISTINCT buyprice) FROM products;+------------------------+| AVG(DISTINCT buyprice) |+------------------------+| 54.372870              |+------------------------+1 row in set

结果与使用DISTINCT操作符的平均价格略有不同。

具有GROUP BY子句的MySQL AVG

我们经常使用AVG函数与GROUP BY子句一起计算表中每组行的平均值。

例如,要计算每个产品线的产品的平均价格,您将使用带有GROUP BY子句的AVG函数,如下查询语句:

SELECT productline,       AVG(buyprice) 'Avarage Price'FROM productsGROUP BY productline;

执行上面查询语句,得到以下结果 -

mysql> SELECT productline,       AVG(buyprice) 'Avarage Price'FROM productsGROUP BY productline;+------------------+---------------+| productline      | Avarage Price |+------------------+---------------+| Classic Cars     | 64.446316     || Motorcycles      | 50.685385     || Planes           | 49.629167     || Ships            | 47.007778     || Trains           | 43.923333     || Trucks and Buses | 56.329091     || Vintage Cars     | 46.066250     |+------------------+---------------+7 rows in set

具有HAVING子句的MySQL AVG

您可以使用AVG函数中的HAVING子句中为分组的平均值设置条件。 例如,如果要仅选择产品平均价格大于50的产品线,则可以使用以下查询:

SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;

执行上面查询语句,得到以下结果 -

mysql> SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;+------------------+---------------+| productline      | Avarage Price |+------------------+---------------+| Classic Cars     | 64.446316     || Motorcycles      | 50.685385     || Trucks and Buses | 56.329091     |+------------------+---------------+3 rows in set

MySQL AVG()函数与子查询

您可以在SQL语句中多次使用AVG()函数来计算一组平均值的平均值。 例如,可以计算产品线平均购买价格的平均买价如下:

SELECT AVG(pl_avg) 'Average Product'FROM (    SELECT AVG(buyprice) pl_avg    FROM products    GROUP BY productline) avgs;

执行上面查询语句,得到以下结果 -

mysql> SELECT AVG(pl_avg) 'Average Product'FROM (    SELECT AVG(buyprice) pl_avg    FROM products    GROUP BY productline) avgs;+-----------------+| Average Product |+-----------------+| 51.1553314286   |+-----------------+1 row in set

怎么运行的 -

    子查询根据产品线计算平均购买价格。

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

    具有NULL值的MySQL AVG函数

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

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

    CREATE TABLE IF NOT EXISTS t(    id  int auto_increment primary key,    val int);

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

    INSERT INTO t(val)VALUES(1),(2),(nulL),(3);

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

    SELECT AVG(val) FROM t;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(val) FROM t;+----------+| AVG(val) |+----------+| 2.0000   |+----------+1 row in set

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

    具有控制流函数的MySQL AVG

    要计算列的平均值,并在单个语句中有条件地计算相同列的平均值,可以使用具有控制流函数(如IFCASEIFNULLNULLIF等)的AVG函数。

    例如,要计算Classic Cars产品线的平均价格与所有产品的平均价格的比例,请使用以下声明:

    SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'FROM products;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'FROM products;+------------------------+| Classic Cars/ Products |+------------------------+| 1.1847798580           |+------------------------+1 row in set

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

    因为AVG函数忽略了计算中的NULL值,所以AVG(IF(productline ='Classic Cars',buyprice,NULL))表达式只计算产品线是Classic Cars的产品的平均价格。


    上一篇:mysql中and指的是什么意思
    下一篇:postgresql和mysql的区别有哪些
    mysql

  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素