적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 웨어하우스
Microsoft Fabric의 SQL 데이터베이스
그룹에서 지정된 식의 모든 값의 최대값을 반환합니다. 다음에 OVER 절을 사용할 수 있습니다.
비고
여러 식 인라인의 모든 값의 최대값을 얻으려면 논리 함수 - GREATEST를 참조하세요.
구문
집계 함수 구문:
MAX ( [ ALL | DISTINCT ] expression )
분석 함수 구문:
MAX ( [ ALL ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )
인수
전체
모든 값에 집계 함수를 적용합니다.
ALL 기본값입니다.
DISTINCT
각 고유 값을 고려하도록 지정합니다.
DISTINCT 는 의미가 MAX없으며 ISO 호환성에서만 사용할 수 있습니다.
expression
상수, 열 이름 또는 함수 및 산술, 비트 및 문자열 연산자의 조합입니다.
MAX
는 숫자, char, nchar, varchar, nvarchar, uniqueidentifier 또는 datetime 열과 함께 사용할 수 있지만 비트 열에는 사용할 수 없습니다. 집계 함수 및 하위 쿼리는 허용되지 않습니다.
자세한 내용은 식을 참조하세요.
오버 ([ partition_by_clause ] [ order_by_clause ] )
partition_by_clause 절에서 생성된 결과 집합을 FROM 함수가 적용되는 파티션으로 나눕니다. 지정하지 않을 경우 쿼리 결과 집합의 모든 행이 단일 그룹으로 취급됩니다.
order_by_clause는 작업이 수행되는 논리적 순서를 결정합니다.
자세한 내용은 SELECT - OVER 절을 참조하세요.
반환 형식
식과 동일한 값을 반환합니다.
설명
MAX 은 null 값을 무시합니다.
MAX 는 선택할 행이 없을 때 반환 NULL 됩니다.
문자 열의 MAX 경우 정렬 시퀀스에서 가장 높은 값을 찾습니다.
MAX는 and OVER 절 없이 ORDER BY 사용할 때 결정적 함수입니다. and OVER 절로 ORDER BY 지정하면 비결정적입니다. 자세한 내용은 결정적 함수 및 비결정적 함수를 참조하세요.
MAX 는 행 집합에서 작동합니다. 인라인 값 집합의 최대값을 가져오려면 논리 함수 - GREATEST를 참조하세요.
예제
이 문서의 코드 샘플은 AdventureWorks2025 또는 AdventureWorksDW2025 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.
A. 기본 예제
다음 예제에서는 가장 높은(최대) 세율을 반환합니다.
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO
결과 집합은 다음과 같습니다.
-------------------
19.60
Warning, null value eliminated from aggregate.
B. OVER 절 사용
다음 예제에서는 절과 함께 , MIN및 MAXAVG 함수를 사용하여 COUNT테이블의 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입니다.