PostgreSQL 教程: min 函数: 获取集合中的最小值

九月 7, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的MIN()函数来获取集合的最小值。

PostgreSQL MIN 函数简介

PostgreSQL 的MIN()函数是一个聚合函数,返回一组值中的最小值。

要查找表列中的最小值,请将列名称传递给MIN()函数。列的数据类型可以是 numberstring 或任何可进行比较的类型。

MIN()函数的语法如下:

SELECT 
    MIN(expression) 
FROM 
   table_expression
...;

AVG()COUNT()SUM()函数不同,DISTINCT选项对MIN()函数没有任何影响。

PostgreSQL MIN() 函数示例

我们将使用dvdrental 示例数据库中的filmfilm_categorycategory表进行演示。

film film_category category tables

1) 在 SELECT 列表子句中使用 MIN 函数

以下示例使用MIN()函数从film表的rental_rate列中获取最低出租率:

SELECT
   MIN (rental_rate)
FROM
   film;

img

查询返回 0.99,即最低出租率。

2) 在子查询中使用 MIN 函数

要获取出租率最低的电影,请使用以下查询:

SELECT
	film_id,
	title,
	rental_rate
FROM
	film
WHERE
	rental_rate = (
		SELECT MIN(rental_rate)
                FROM film
	);

img

怎么运行的。

  • 首先,子查询查找最低的租金率。
  • 然后,外部查询检索出租率等于子查询返回的最低出租率的电影。

3) 将 MIN 函数与 GROUP BY 子句一起使用

在实践中,您经常使用带有GROUP BY子句的MIN函数来查找每组中的最小值。

以下语句使用带有GROUP BY子句的MIN()函数按类别查找电影的最低重置成本:

SELECT 
	name category,
	MIN(replacement_cost) replacement_cost
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name
ORDER BY name;

img

4) 将 MIN 函数与 HAVING 子句一起使用

可以使用HAVING子句中的MIN函数来过滤最小值符合特定条件的组。

以下查询使用MIN()函数查找按类别分组的电影的最低重置成本,并仅选择重置成本大于的组9.99

SELECT 
	name category,
	MIN(replacement_cost) replacement_cost
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name
HAVING MIN(replacement_cost) > 9.99
ORDER BY name;

img

5) 将 MIN 函数与其他聚合函数一起使用

可以将MIN()函数与其他聚合函数一起使用,例如同一查询中的MAX()函数。

以下示例使用MIN()MAX()函数按类别查找最短和最长的电影:

SELECT 
	name category,
	MIN(length) min_length,
	MAX(length) max_length
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name
ORDER BY name;

img

6) 从两列或多列中查找最小值

假设您有一个ranks表,如下:

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

及其样例数据:

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

假设您需要找到最小排名的用户:

img

在这种情况下,您无法使用MIN()函数,因为MIN()函数应用于行,而不是列。要查找两列或多列的最小值,请使用LEAST()函数:

SELECT
	user_id,
	LEAST (rank_1, rank_2, rank_3) AS lowest_rank
FROM
	ranks;

查询返回的结果符合我们的预期。

概括

  • 使用MIN()函数查找一组值中的最小值。

  • 使用MIN()函数和GROUP BY子句查找一组值中的最小值。

  • 使用LEAST()函数查找列之间的最小值。