全部产品

MAX

MAX 函数返回参数中指定的列中的最大值。

语法

MAX([ DISTINCT | UNIQUE | ALL ] expr) [ OVER (analytic_clause) ]

作为分析函数使用时,您需要使用窗口函数的完整语法,它对一组行的集合进行计算并返回多个值。作为聚合函数使用时,该函数对一组行的集合进行聚合计算,结果只能返回一个值,此时不需要加 OVER 关键字。

参数

参数

说明

DISTINCT

返回的行中去除重复行,且忽略值为 NULL 的行。

UNIQUE

返回的行中去除重复行,且忽略值为 NULL 的行。

ALL

返回所有值,包含重复行,且忽略值为 NULL 的行。

expr

可为数值、字符、日期型或其它类型的数据列或表达式。

OVER

使用 OVER 子句定义窗口进行计算。

返回类型

返回与 expr 相同的数据类型值。

示例

分析函数示例

以下语句创建了表 employees,并向里面插入数据:

CREATE TABLE employees (manager_id INT, last_name varchar(50), hiredate varchar(50), SALARY INT);
INSERT INTO employees VALUES(100, 'Wei',  '2019-09-11',17000);     
INSERT INTO employees VALUES(100, 'Red', '2019-11-05', 17000);
INSERT INTO employees VALUES(101, 'Part',  '2018-10-01',12008); 
INSERT INTO employees VALUES(102, 'Wei',  '2019-09-11',9000);     
INSERT INTO employees VALUES(103, 'Red', '2019-11-05', 6000);
INSERT INTO employees VALUES(104, 'Part',  '2018-10-01',8000); 
COMMIT;

执行以下语句查询 SALARY 列的最大值:

SELECT manager_id, last_name, salary FROM (SELECT manager_id, last_name, salary, 
MAX(salary) OVER (PARTITION BY manager_id) AS rmax_sal
FROM employees) WHERE salary = rmax_sal ORDER BY manager_id, last_name, salary;

查询结果如下:

+------------+-----------+--------+
| MANAGER_ID | LAST_NAME | SALARY |
+------------+-----------+--------+
|        100 | Red       |  17000 |
|        100 | Wei       |  17000 |
|        101 | Part      |  12008 |
|        102 | Wei       |   9000 |
|        103 | Red       |   6000 |
|        104 | Part      |   8000 |
+------------+-----------+--------+

聚合函数示例

执行以下语句查询 SALARY 列的最大值:

SELECT MAX(salary) FROM employees;

查询结果如下:

+-------------+
| MAX(SALARY) |
+-------------+
|       17000 |
+-------------+