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