MAX (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

返回组中指定表达式的所有值的最大值。 可以后跟 OVER 子句。

注释

若要获取内联多个表达式的所有值的最大数目,请参阅 逻辑函数 - GREATEST

Transact-SQL 语法约定

语法

聚合函数语法:

MAX ( [ ALL | DISTINCT ] expression )

分析函数语法:

MAX ( [ ALL ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )

参数

全部

向所有值应用此聚合函数。 ALL 是默认值。

DISTINCT

指定考虑每一个唯一值。 DISTINCT 对 ISO 兼容性没有意义 MAX,并且仅适用于 ISO 兼容性。

expression

常量、列名或函数,以及算术、按位和字符串运算符的任意组合。 MAX 可以与 数字charncharvarcharnvarcharuniqueidentifierdatetime 列一起使用,但不能与 列一起使用。 不允许聚合函数和子查询。

有关详细信息,请参阅表达式

OVER ([ partition_by_clause ] [ order_by_clause ] )

partition_by_clause 将子句生成的 FROM 结果集划分为应用函数的分区。 如果未指定,则此函数将查询结果集的所有行视为单个组。

order_by_clause 确定执行操作的逻辑顺序。

有关详细信息,请参阅 SELECT - OVER 子句

返回类型

返回与 expression 相同的值

注解

MAX 忽略任何 null 值。

MAX NULL当没有要选择的行时返回。

对于字符列, MAX 查找排序序列中的最大值。

MAX 在不使用 and OVERORDER BY 子句的情况下使用时,是确定性函数。 使用 and OVER 子句指定ORDER BY时,这是不确定的。 有关详细信息,请参阅 “确定性”和“不确定”函数

MAX 对一组行进行作。 若要获取一组内联值的最大值,请参阅 逻辑函数 - GREATEST

示例

本文中的代码示例使用 AdventureWorks2025AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

A. 基本示例

以下示例返回最高(最大)税率。

SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO

结果集如下。

-------------------
19.60
Warning, null value eliminated from aggregate.

B. 使用 OVER 子句

以下示例使用子句的MIN函数MAXAVGCOUNT为表中每个部门OVER提供聚合值。HumanResources.Department

SELECT DISTINCT Name,
                MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary,
                MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary,
                AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary,
                COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
     INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
         ON eph.BusinessEntityID = edh.BusinessEntityID
     INNER JOIN HumanResources.Department AS d
         ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY Name;

结果集如下。

Name                          MinSalary             MaxSalary             AvgSalary             EmployeesPerDept
----------------------------- --------------------- --------------------- --------------------- ----------------
Document Control              10.25                 17.7885               14.3884               5
Engineering                   32.6923               63.4615               40.1442               6
Executive                     39.06                 125.50                68.3034               4
Facilities and Maintenance    9.25                  24.0385               13.0316               7
Finance                       13.4615               43.2692               23.935                10
Human Resources               13.9423               27.1394               18.0248               6
Information Services          27.4038               50.4808               34.1586               10
Marketing                     13.4615               37.50                 18.4318               11
Production                    6.50                  84.1346               13.5537               195
Production Control            8.62                  24.5192               16.7746               8
Purchasing                    9.86                  30.00                 18.0202               14
Quality Assurance             10.5769               28.8462               15.4647               6
Research and Development      40.8654               50.4808               43.6731               4
Sales                         23.0769               72.1154               29.9719               18
Shipping and Receiving        9.00                  19.2308               10.8718               6
Tool Design                   8.62                  29.8462               23.5054               6

°C 将 MAX 与字符数据配合使用

以下示例返回按字母顺序对数据库名称进行排序的数据库名称。 该示例使用 WHERE database_id < 5,选择系统数据库。

SELECT MAX(name)
FROM sys.databases
WHERE database_id < 5;

最后一个系统数据库为 tempdb