mysql中如何求平均值

网友投稿 677 2023-12-09

mysql中如何求平均值

这篇文章主要为大家展示了“mysql中如何求平均值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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;

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

mysqlSELECT 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 PriceFROM 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 PriceFROM 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 setMySQL 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 ProductFROM (     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中如何求平均值”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mysql子查询语句怎么写
下一篇:没有SQL Server数据库时如何打开.MDF文件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~