PostgreSQL 教程: sum 函数

九月 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函数的功能。

payment table

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;	

img

以下查询返回支付最多的前五个客户:

SELECT
	customer_id,
	SUM (amount) AS total
FROM
	payment
GROUP BY
	customer_id
ORDER BY total DESC
LIMIT 5;

img

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

img

4) 将 SUM 函数与表达式一起使用

请查看示例数据库中的rental表,如下:

img

以下语句使用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;

img

概括

  • 使用SUM()函数计算值的总和。

  • 使用DISTINCT选项计算不同值的总和。

  • 使用带有GROUP BY子句的SUM()函数来计算每个组的总和。