MAX (Transact-SQL)MAX (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Возвращает максимальное значение выражения.Returns the maximum value in the expression.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Aggregation Function Syntax  
MAX( [ ALL | DISTINCT ] expression )  
  
-- Analytic Function Syntax  
MAX ([ ALL ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )  

АргументыArguments

ALLALL
Применяет агрегатную функцию ко всем значениям.Applies the aggregate function to all values. ALL является параметром по умолчанию.ALL is the default.

DISTINCTDISTINCT
Указывает, что учитывается каждое уникальное значение.Specifies that each unique value is considered. Параметр DISTINCT не имеет смысла при использовании функцией MAX и доступен только для совместимости со стандартом ISO.DISTINCT is not meaningful with MAX and is available for ISO compatibility only.

expressionexpression
Может быть константой, именем столбца или функцией, а также любым сочетанием арифметических, побитовых и строковых операторов.Is a constant, column name, or function, and any combination of arithmetic, bitwise, and string operators. MAX можно использовать со столбцами numeric, character, uniqueidentifier и datetime, но не со столбцами bit.MAX can be used with numeric, character, uniqueidentifier, and datetime columns, but not with bit columns. Агрегатные функции и вложенные запросы не допускаются.Aggregate functions and subqueries are not permitted.

Дополнительные сведения см. в разделе Выражения (Transact-SQL).For more information, see Expressions (Transact-SQL).

OVER ( [ partition_by_clause ] order_by_clause )OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause делит результирующий набор, полученный с помощью предложения FROM, на секции, к которым применяется функция.partition_by_clause divides the result set produced by the FROM clause into partitions to which the function is applied. Если этот параметр не указан, функция обрабатывает все строки результирующего набора запроса как отдельные группы.If not specified, the function treats all rows of the query result set as a single group. order_by_clause определяет логический порядок, в котором выполняется операция.order_by_clause determines the logical order in which the operation is performed. Аргумент order_by_clause является обязательным.order_by_clause is required. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).

Типы возвращаемых данныхReturn Types

Возвращает то же значение, что и expression.Returns a value same as expression.

RemarksRemarks

При выполнении функции MAX все значения NULL пропускаются.MAX ignores any null values.

MAX возвращает NULL, если нет строк для выбора.MAX returns NULL when there is no row to select.

При использовании со столбцами, содержащими символьные значения, функция MAX находит наибольшее значение в упорядоченной последовательности.For character columns, MAX finds the highest value in the collating sequence.

MAX — это детерминированная функция, если она используется без предложений OVER и ORDER BY.MAX is a deterministic function when used without the OVER and ORDER BY clauses. Она не детерминирована при использовании с предложениями OVER и ORDER BY.It is nondeterministic when specified with the OVER and ORDER BY clauses. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.For more information, see Deterministic and Nondeterministic Functions.

ПримерыExamples

A.A. Простой примерSimple example

В следующем примере возвращается наибольший (максимальный) размер налога в базе данных AdventureWorks2012AdventureWorks2012.The following example returns the highest (maximum) tax rate in the AdventureWorks2012AdventureWorks2012 database.

SELECT MAX(TaxRate)  
FROM Sales.SalesTaxRate;  
GO  

Ниже приводится результирующий набор.Here is the result set.

-------------------  
19.60  
Warning, null value eliminated from aggregate.  
 
(1 row(s) affected)  

Б.B. Использование предложения OVERUsing the OVER clause

В приведенном ниже примере рассматривается применение функций MIN, MAX, AVG и COUNT с предложением OVER для получения статистических значений для каждого из отделов в таблице HumanResources.Department в базе данных AdventureWorks2012AdventureWorks2012.The following example uses the MIN, MAX, AVG, and COUNT functions with the OVER clause to provide aggregated values for each department in the HumanResources.Department table in the AdventureWorks2012AdventureWorks2012 database.

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  
JOIN HumanResources.EmployeeDepartmentHistory AS edh  
     ON eph.BusinessEntityID = edh.BusinessEntityID  
JOIN HumanResources.Department AS d  
 ON d.DepartmentID = edh.DepartmentID  
WHERE edh.EndDate IS NULL  
ORDER BY Name;  

Ниже приводится результирующий набор.Here is the result set.

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  
  
 (16 row(s) affected)  

В.C. Использование MAX с символьными даннымиUsing MAX with character data

В приведенном ниже примере возвращается имя базы данных, которое является последним при сортировке по алфавиту.The following example returns the database name that sorts as the last name alphabetically. В нем используется WHERE database_id < 5 для обработки только системных баз данных.The example uses WHERE database_id < 5, to consider only the system databases.

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

Последняя системная база данных — tempdb.The last system database is tempdb.

См. также:See Also

Агрегатные функции (Transact-SQL) Aggregate Functions (Transact-SQL)
Предложение OVER (Transact-SQL)OVER Clause (Transact-SQL)