Skip to content

PostgreSQL - MIN 函数

PostgreSQL 的 MIN() 函数是一个聚合函数,它从指定列的值集中返回最小值。它对于数据分析和报表至关重要。

要理解 MIN() 函数,请考虑以下 employees 表:

-- 示例 employees 表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary NUMERIC(10, 2)
);
INSERT INTO employees VALUES
(1, 'Paul', 'IT', 60000),
(2, 'Allen', 'Engineering', 75000),
(3, 'Teddy', 'IT', 62000),
(4, 'Mark', 'Engineering', 95000),
(5, 'David', 'Sales', 85000),
(6, 'Kim', 'Sales', 82000),
(7, 'James', 'IT', 58000);

要查找所有员工中的最低工资,您可以使用以下命令:

SELECT MIN(salary) AS lowest_salary FROM employees;

上述语句将产生以下结果:

lowest_salary
---------------
58000.00
(1 row)

MIN() 函数与 GROUP BY 子句结合使用

Section titled “MIN() 函数与 GROUP BY 子句结合使用”

MIN() 更强大的用法是查找不同行组的最小值。例如,要查找每个部门内的最低工资,您可以将 MIN() 与 GROUP BY 子句一起使用。

SELECT
department,
MIN(salary) AS lowest_salary_in_dept
FROM employees
GROUP BY department
ORDER BY department;

此查询按部门对员工进行分组,然后查找每个组的最低工资,产生以下结果:

department | lowest_salary_in_dept
-------------+-------------------------
Engineering | 75000.00
IT | 58000.00
Sales | 82000.00
(3 rows)

您可以将 MIN() 与 MAX() 和 AVG() 等其他聚合函数一起使用,以便在单个查询中获取数据的综合摘要。

SELECT
department,
MIN(salary) AS min_sal,
MAX(salary) AS max_sal,
AVG(salary)::numeric(10,2) AS avg_sal
FROM employees
GROUP BY department;

此查询提供了按部门划分的详细工资明细:

department | min_sal | max_sal | avg_sal
-------------+----------+----------+-----------
Engineering | 75000.00 | 95000.00 | 85000.00
IT | 58000.00 | 62000.00 | 60000.00
Sales | 82000.00 | 85000.00 | 83500.00
(3 rows)
  • NULL 值:MIN() 函数会忽略 NULL 值。如果一个组中的所有值都是 NULL,它将返回 NULL。
  • 数据类型:MIN() 可以用于数字、字符串和日期/时间数据类型。对于字符串,它返回按字母顺序排列的第一个值。
  • 性能:在大型表上,通过在被评估的列上创建 B-tree 索引,可以显著提高 MIN() 查询的性能。数据库通常只需读取索引的第一个条目即可找到最小值。
postgresql_useful_functions.htm