PostgreSQL 教程: max 函数: 获取集合中的最大值

九月 7, 2023

摘要:本教程向您展示如何使用 PostgreSQL 的MAX()函数获取集合的最大值。

PostgreSQL MAX 函数简介

PostgreSQL 的MAX函数是一个聚合函数,它返回一组值中的最大值。MAX 函数在很多情况下都很有用。例如,您可以使用MAX函数查找工资最高的员工或查找最昂贵的产品等。

MAX函数的语法如下:

MAX(expression);

您不仅可以在SELECT列表子句中使用MAX函数,还可以在WHEREHAVING子句中使用该函数。让我们看一下使用MAX函数的一些示例。

PostgreSQL MAX 函数示例

让我们查看一下示例数据库中的payment表。

payment table

以下查询使用MAX()函数查找payment表中客户支付的最高金额:

SELECT MAX(amount)
FROM payment;

PostgreSQL MAX function example

子查询中的 MAX 函数

要获取其他信息以及最高付款,您可以使用子查询,如下所示:

SELECT * FROM payment
WHERE amount = (
   SELECT MAX (amount)
   FROM payment
);

首先,子查询使用MAX()函数返回最高付款,然后外部查询检索金额等于子查询返回的最高付款的所有行。

查询的输出如下:

PostgreSQL MAX with Subquery

下图说明了 PostgreSQL 执行查询的步骤:

postgresql max function with subquery

结合 GROUP BY 子句使用 MAX 函数

您可以将MAX 函数与GROUP BY子句结合起来以获得每个组的最大值。例如,以下查询获取每个客户支付的最高付款。

SELECT
	customer_id,
	MAX (amount)
FROM
	payment
GROUP BY
	customer_id;

PostgreSQL max function with group by

PostgreSQL MAX with GROUP BY example

结合 HAVING 子句使用 MAX 函数

如果在HAVING子句中使用MAX()函数,则可以对组应用过滤器。

例如,以下查询仅选择每个客户支付的最高付款,且付款金额大于8.99

SELECT
	customer_id,
	MAX (amount)
FROM
	payment
GROUP BY
	customer_id
HAVING MAX(amount) > 8.99

PostgreSQL max function with group by

PostgreSQL MAX with HAVING example

从两列或多列中查找最大值

首先,创建一个新表,名为ranks,该表由四列组成:第一列存储用户 ID,其他三列存储从 1 到 3 的排名。

DROP TABLE IF EXISTS ranks;
CREATE TABLE ranks (
	user_id INT PRIMARY KEY,
	rank_1 INT NOT NULL,
	rank_2 INT NOT NULL,
	rank_3 INT NOT NULL
);

其次,插入示例数据ranks表中,如下所示:

INSERT INTO ranks
VALUES
	(1, 6, 3, 5),
	(2, 2, 8, 5),
	(3, 5, 9, 8);

如何获得每个用户的最大排名,如下图所示:

postgresql greatest function

要实现这一点,您可以使用GREATEST()函数而不是MAX函数。GREATEST函数返回值列表中的最大值。

SELECT
	user_id,
	GREATEST (rank_1, rank_2, rank_3) AS largest_rank
FROM
	ranks;

在本教程中,您学习了如何使用 PostgreSQL 的MAX函数查找集合的最大值。