九月 7, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的SUM()
函数来计算一组值的总和。
目录
PostgreSQL SUM() 函数简介
PostgreSQL 的SUM()
是一个聚合函数,返回全部值或不同值的总和。
SUM()
函数的语法如下:
SUM(DISTINCT expression)
SUM()
函数忽略NULL
. 这意味着SUM()
在计算时不考虑NULL
。
如果使用DISTINCT
选项,SUM()
函数将计算不同值的总和。
例如,如果没有DISTINCT
选项,对 1、1、8 和 2 应用SUM()
将返回 12。当带有DISTINCT
选项时,对 1、1、8 和 2 应用SUM()
将返回 11 (1 + 8 + 2)。它忽略了一个重复值 (1)。
如果在SELECT
语句中使用SUM
函数,则在SELECT
语句不返回行的情况下,它返回NULL
,而不是零。
PostgreSQL SUM() 函数示例
我们将使用示例数据库中的payment
表来演示SUM
函数的功能。
1) 在 SELECT 语句中使用 SUM() 函数的示例
以下语句使用SUM()
函数计算 ID 为 2000 的客户的总付款。
SELECT SUM (amount) AS total
FROM payment
WHERE customer_id = 2000;
total
-------
null
(1 row)
由于payment
表中没有行的customer_id
列值为 2000,因此SUM()
函数返回NULL
。
在没有找到匹配行的情况下,如果您希望SUM()
函数返回零,而不是返回NULL
,则可以使用COALESCE
函数。
该COALESCE()
函数返回第一个非空参数。换句话说,如果第一个参数是NULL
,则返回第二个参数。
以下查询说明了如何结合COALESCE()
函数使用SUM()
函数:
SELECT
COALESCE(SUM(amount),0) AS total
FROM
payment
WHERE
customer_id = 2000;
total
-------
0
(1 row)
2) 将 SUM() 函数与 GROUP BY 子句一起使用
要计算每个组的汇总,您可以使用GROUP BY
子句将表中的行分组并将SUM()
函数应用于每个组。
以下示例使用带有GROUP BY
子句的SUM()
函数来计算每个客户支付的总金额:
SELECT
customer_id,
SUM (amount) AS total
FROM
payment
GROUP BY
customer_id
ORDER BY total;
以下查询返回支付最多的前五个客户:
SELECT
customer_id,
SUM (amount) AS total
FROM
payment
GROUP BY
customer_id
ORDER BY total DESC
LIMIT 5;
3) 将 SUM 函数与 HAVING 子句一起使用
要根据特定条件过滤组的总和,请在HAVING
子句中使用SUM
函数。
以下示例返回支付超过 200 美元的客户:
SELECT
customer_id,
SUM (amount) AS total
FROM
payment
GROUP BY
customer_id
HAVING SUM(amount) > 200
ORDER BY total DESC
4) 将 SUM 函数与表达式一起使用
请查看示例数据库中的rental
表,如下:
以下语句使用SUM()
函数计算总租赁天数:
SELECT SUM(return_date - rental_date )
FROM rental;
sum
-------------------------
71786 days 190098:21:00
(1 row)
怎么运行的。
- 首先,通过归还日期减去租赁日期来计算租赁期限。
- 其次,将
SUM()
函数应用于表达式。
以下示例使用SUM()
函数计算客户的总持续时间:
SELECT first_name || ' ' || last_name full_name,
SUM(return_date - rental_date ) rental_duration
FROM rental
INNER JOIN customer USING(customer_id)
GROUP BY customer_id
ORDER BY full_name;
总结
- 使用
SUM()
函数计算值的总和。 - 使用
DISTINCT
选项计算不同值的总和。 - 使用带有
GROUP BY
子句的SUM()
函数来计算每个组的总和。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数