Condividi tramite


MAX (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Restituisce il valore massimo dell'espressione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

ALL
Applica la funzione di aggregazione a tutti i valori. Il valore predefinito è ALL.

DISTINCT
Consente di considerare ogni valore univoco. DISTINCT non è significativo per la funzione MAX ed è disponibile solo per la compatibilità con ISO.

expression
Costante, nome di colonna o funzione e qualsiasi combinazione di operatori aritmetici, bit per bit e stringa. MAX può essere usata con le colonne numeric, character, uniqueidentifier e datetime, ma non con le colonne bit. Non è possibile utilizzare funzioni di aggregazione e sottoquery.

Per altre informazioni, vedere Espressioni (Transact-SQL).

OVER ( partition_by_clause [ order_by_clause ] )
partition_by_clause suddivide il set di risultati generato dalla clausola FROM in partizioni alle quali viene applicata la funzione. Se non specificato, la funzione tratta tutte le righe del set di risultati della query come un unico gruppo. order_by_clause determina l'ordine logico in cui viene eseguita l'operazione. partition_by_clause è obbligatorio. Per altre informazioni, vedere Clausola OVER (Transact-SQL).

Tipi restituiti

Restituisce un valore uguale a expression.

Osservazioni:

La funzione MAX ignora tutti i valori Null.

MAX restituisce NULL quando non vi è alcuna riga da selezionare.

Con colonne di caratteri, la funzione MAX consente di individuare il valore massimo nella sequenza di confronto.

MAX è una funzione deterministica quando viene utilizzata senza le clausole ORDER BY e OVER. Non è deterministica quando viene specificata con le clausole ORDER BY e OVER. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.

Esempi

R. Esempio semplice

Nell'esempio seguente viene restituita l'aliquota d'imposta più alta (massima) nel database AdventureWorks2022.

SELECT MAX(TaxRate)  
FROM Sales.SalesTaxRate;  
GO  

Il set di risultati è il seguente.

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

B. Utilizzo della clausola OVER

Nell'esempio seguente vengono utilizzate le funzioni MIN, MAX, AVG e COUNT con la clausola OVER per fornire valori aggregati per ogni reparto della HumanResources.Department tabella nel database AdventureWorks2022.

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;  

Il set di risultati è il seguente.

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. Uso di MAX con dati di tipo carattere

L'esempio seguente restituisce il nome del database elencato per ultimo in ordine alfabetico. L'esempio usa WHERE database_id < 5, in modo da considerare solo i database di sistema.

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

L'ultimo database di sistema è tempdb.

Vedi anche

Funzioni di aggregazione (Transact-SQL)
Clausola OVER (Transact-SQL)