0

0

mysql中怎么求平均值

青灯夜游

青灯夜游

发布时间:2021-12-02 11:29:33

|

47834人浏览过

|

来源于php中文网

原创

在mysql中,可以利用AVG()函数来求平均值,该函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值;语法“SELECT AVG(column_name) FROM table_name”。

mysql中怎么求平均值

本教程操作环境: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 products
WHERE productline = 'Classic Cars';

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

mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price'
FROM products
WHERE 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函数,如下查询语句:

Simplified
Simplified

AI写作、平面设计、编辑视频和发布内容。专为团队打造。

下载
SELECT productline,
       AVG(buyprice) 'Avarage Price'
FROM products
GROUP BY productline;

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

mysql> SELECT productline,
       AVG(buyprice) 'Avarage Price'
FROM products
GROUP 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视频教程

相关专题

更多
Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

55

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

67

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

15

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

152

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

139

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 801人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号