MySQL的AVG
简介:在本教程中,您将学习如何使用MySQL AVG()函数来计算一组值的平均值。
MySQL AVG()函数简介
MySQL AVG()函数是一个聚合函数,可让您计算集合的平均值。
这是AVG()函数的基本语法:
AVG(DISTINCT expression)
您可以在AVG函数中使用DISTINCT运算符来计算不同值的平均值。
例如,如果您具有一组值1,1,2,3,则具有DISTINCT运算符的AVG函数将返回2,即(1 + 2 + 3)/ 3。
MySQL AVG()函数示例
我们将使用示例数据库中的产品表进行演示:
A)使用MySQL AVG()函数计算列示例中所有值的平均值
本示例使用AVG()函数从产品表中计算所有产品的平均购买价格:
SELECT AVG(buyprice) 'Average Price' FROM products;
B)通过WHERE子句示例使用MySQL AVG()函数
以下示例使用AVG()函数来计算经典汽车产品线中产品的平均购买价格:
SELECT AVG(buyprice) 'Average Classic Cars Price' FROM products WHERE productline = 'Classic Cars';
在此示例中,WHERE子句的条件仅包括Classic Cars产品线。
因此,AVG()函数仅计算老爷车中产品购买价格的平均值。
C)使用MySQL AVG和DISTINCT选项示例
此查询检查是否有价格相同的产品:
SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;
此查询使用AVG()函数和DISTINCT选项来计算不同购买价格的平均值:
SELECT FORMAT(AVG(DISTINCT buyprice), 2) FROM products;
注意,不使用DISTINCT运算符,结果与平均购买价格不同。
D)带GROUP BY子句的MySQL AVG示例
AVG()函数通常与GROUP BY子句结合使用,以计算表中每组行的平均值。
例如,要计算每个产品系列的产品平均购买价格,可以将AVG()函数与GROUP BY子句一起使用,如下所示:
SELECT productline, AVG(buyprice) 'Average Price' FROM products GROUP BY productline;
E)通过HAVING子句示例使用MySQL AVG()函数
您可以在HAVING子句中使用AVG()函数来设置组平均值的条件。
例如,如果您只想选择产品的平均购买价格大于50的产品系列,则可以使用以下查询:
SELECT productline, AVG(buyprice) 'Average Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
F)在子查询示例中使用MySQL AVG()函数
您可以在SQL语句中多次使用AVG()函数来计算一组平均值的平均值。
此查询使用AVG()函数来计算产品线的平均购买价格的平均购买价格:
SELECT AVG(pl_avg) 'Average Product' FROM (SELECT AVG(buyprice) pl_avg FROM products GROUP BY productline) avgs;
这个怎么运作。
子查询按产品线计算平均购买价格。
外部查询计算从子查询返回的产品线的平均购买价格的平均购买价格。
G)将MySQL AVG()函数与NULL示例一起使用
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;
该语句按预期返回2,因为NULL值不包括在AVG函数的计算中。
H)将MySQL AVG()函数与控制流函数一起使用
要在单个语句中计算列的平均值并有条件地计算同一列的平均值,请使用AVG()函数和控制流函数,例如IF,CASE,IFNULL和NULLIF。
例如,要计算Classic Cars产品系列的平均购买价格与所有产品的平均购买价格的比率,请使用以下语句:
SELECT AVG(IF(productline = 'Classic Cars', buyprice, NULL)) / AVG(buyprice) 'Classic Cars/ Products' FROM products;
如果产品系列为Classic Cars,则IF(productline ='Classic Cars',buyprice,NULL)表达式返回购买价格,否则为NULL。
由于AVG()函数在计算中会忽略NULL值,因此AVG(IF(productline ='Classic Cars',buyprice,NULL))表达式仅返回产品线为Classic Cars的产品的平均购买价格。
在本教程中,您学习了一些有用的技术,可以通过使用AVG()函数来计算一组值的平均值。