站长网 MySql教程 mysql中如何求平均值

mysql中如何求平均值

这篇文章主要为大家展示了mysql中如何求平均值,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下mysql中如何求平均值这篇文章吧。 在mysql中,可以利用AVG()函数来求平均值,该函数可以通过计算返回的行数和每一

这篇文章主要为大家展示了“mysql中如何求平均值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何求平均值”这篇文章吧。
 
 
在mysql中,可以利用AVG()函数来求平均值,该函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值;语法“SELECT AVG(column_name) FROM table_name”。
 
本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
 
在mysql中,可以利用AVG()函数来求平均值。
 
MySQL AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值。
 
AVG() 函数可以通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
 
AVG()函数的语法如下:
 
SELECT AVG(column_name) FROM table_name;
AVG()函数中还可添加DISTINCT运算符来计算不同值的平均值。 例如,如果您有一组值1、1、2、3,具有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函数,如下查询语句:
 
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的新表,其中有两列id和val,val列可以包含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
要计算列的平均值,并在单个语句中有条件地计算相同列的平均值,可以使用具有控制流函数(如IF,CASE,IFNULL,NULLIF等)的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中如何求平均值”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/jc/mysql/2021/1216/39304.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部