九月 7, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的AVG()
函数来计算一组值的平均值。
目录
PostgreSQL AVG 函数介绍
AVG()
函数是 PostgreSQL 中最常用的聚合函数之一。AVG()
函数允许您计算一组值的平均值。
AVG()
函数的语法如下:
AVG(column)
您可以在SELECT
和HAVING
子句中使用AVG()
函数。
让我们看一下使用AVG
函数的一些示例。
我们将使用 dvdrental 示例数据库中的payment
表进行演示,如下:
PostgreSQL AVG 函数示例
如果您想知道客户支付的平均金额,您可以在amount
列上应用AVG
函数,如下查询:
SELECT AVG(amount)
FROM payment;
avg
--------------------
4.2006056453822965
(1 row)
为了使输出更具可读性,您可以使用强制转换运算符,如下所示:
SELECT AVG(amount)::numeric(10,2)
FROM payment;
avg
------
4.20
(1 row)
带 DISTINCT 运算符的 AVG 函数
要计算集合中不同值的平均值,请使用 distinct 选项,如下所示:
AVG(DISTINCT column)
以下查询返回客户的平均付款额。因为我们使用了DISTINCT
,PostgreSQL 仅采用唯一的金额计算平均值。
SELECT AVG(DISTINCT amount)::numeric(10,2)
FROM payment;
avg
------
6.14
(1 row)
请注意,结果与不使用DISTINCT
选项的第一个示例不同。
将 AVG 函数与 SUM 函数一起使用
以下查询使用SUM
和AVG
函数来计算客户支付的总金额以及所有交易的平均值。
SELECT
AVG(amount)::numeric(10,2),
SUM(amount)::numeric(10,2)
FROM
payment;
avg | sum
------+----------
4.20 | 61312.04
(1 row)
将 AVG 函数与 GROUP BY 子句一起使用
要计算分组的平均值,请结合 GROUP BY 子句使用AVG
函数。首先,GROUP BY
子句将表的行分为组,然后将AVG
函数应用于每个组。
以下示例使用AVG()
函数结合GROUP BY
子句计算每个客户支付的平均金额:
SELECT
customer_id,
first_name,
last_name,
AVG (amount)::NUMERIC(10,2)
FROM
payment
INNER JOIN customer USING(customer_id)
GROUP BY
customer_id
ORDER BY
customer_id;
在查询中,我们使用内连接将payment
表与customer
表连接起来。我们使用GROUP BY
子句将客户分组,并应用AVG()
函数计算每组的平均值。
将 AVG 函数与 HAVING 子句一起使用
您可以在HAVING
子句中使用AVG
函数根据特定条件过滤组。例如,对于所有客户,您可以获取平均付款大于 5 美元的客户。以下查询可帮助您执行此操作:
SELECT
customer_id,
first_name,
last_name,
AVG (amount)::NUMERIC(10,2)
FROM
payment
INNER JOIN customer USING(customer_id)
GROUP BY
customer_id
HAVING
AVG (amount) > 5
ORDER BY
customer_id;
此查询与上面的查询类似,但多了一个HAVING
子句。我们在HAVING
子句中使用AVG
函数来过滤平均数量小等于 5 的组。
AVG 函数和 NULL
让我们看看当AVG()
函数的输入为 NULL 时该函数的行为。
首先,创建一个表,名为t1
。
CREATE TABLE t1 (
id serial PRIMARY KEY,
amount INTEGER
);
其次,插入一些示例数据:
INSERT INTO t1 (amount)
VALUES
(10),
(NULL),
(30);
t1
表中的数据如下:
SELECT * FROM t1;
第三步,使用AVG()
函数计算金额列中的平均值。
SELECT AVG(amount)::numeric(10,2)
FROM t1;
avg
-------
20.00
(1 row)
它返回 20,这意味着AVG()
函数忽略了NULL
值。
在本教程中,您学习了如何使用 PostgreSQL 的AVG()
函数来计算集合的平均值。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数