九月 7, 2023
摘要:本教程向您展示如何使用 PostgreSQL 的MAX()
函数获取集合的最大值。
目录
PostgreSQL MAX 函数简介
PostgreSQL 的MAX
函数是一个聚合函数,它返回一组值中的最大值。MAX
函数在很多情况下都很有用。例如,您可以使用MAX
函数查找工资最高的员工或查找最昂贵的产品等。
MAX
函数的语法如下:
MAX(expression);
您不仅可以在 SELECT 列表子句中使用MAX
函数,还可以在 WHERE 和 HAVING 子句中使用该函数。让我们看一下使用MAX
函数的一些示例。
PostgreSQL MAX 函数示例
让我们查看一下示例数据库中的payment
表。
以下查询使用MAX()
函数查找payment
表中客户支付的最高金额:
SELECT MAX(amount)
FROM payment;
子查询中的 MAX 函数
要获取其他信息以及最高付款,您可以使用子查询,如下所示:
SELECT * FROM payment
WHERE amount = (
SELECT MAX (amount)
FROM payment
);
首先,子查询使用MAX()
函数返回最高付款,然后外部查询检索金额等于子查询返回的最高付款的所有行。
查询的输出如下:
下图说明了 PostgreSQL 执行查询的步骤:
结合 GROUP BY 子句使用 MAX 函数
您可以将MAX
函数与GROUP BY
子句结合起来以获得每个组的最大值。例如,以下查询获取每个客户支付的最高付款。
SELECT
customer_id,
MAX (amount)
FROM
payment
GROUP BY
customer_id;
结合 HAVING 子句使用 MAX 函数
如果在 HAVING 子句中使用MAX()
函数,则可以对组应用过滤器。
例如,以下查询仅选择每个客户支付的最高付款,且付款金额大于8.99
。
SELECT
customer_id,
MAX (amount)
FROM
payment
GROUP BY
customer_id
HAVING MAX(amount) > 8.99
从两列或多列中查找最大值
首先,创建一个新表,名为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);
如何获得每个用户的最大排名,如下图所示:
要实现这一点,您可以使用GREATEST()
函数而不是MAX
函数。GREATEST
函数返回值列表中的最大值。
SELECT
user_id,
GREATEST (rank_1, rank_2, rank_3) AS largest_rank
FROM
ranks;
在本教程中,您学习了如何使用 PostgreSQL 的MAX
函数查找集合的最大值。
了解更多
PostgreSQL 教程:聚合函数
PostgreSQL 文档:聚集函数