Mysql
 sql >> Database >  >> RDS >> Mysql

MAX() – Trova il valore massimo in una colonna in MySQL

Il MySQL MAX() function è una funzione aggregata che restituisce il valore massimo da un'espressione.

In genere, l'espressione è un intervallo di valori restituiti come righe separate in una colonna ed è possibile utilizzare questa funzione per trovare il valore massimo dalle righe restituite. Se non ci sono righe corrispondenti, MAX() restituisce NULL .

Ad esempio, puoi utilizzare questa funzione per scoprire quale città ha la popolazione più numerosa da un elenco di città.

Sintassi

La sintassi di MAX() va così:

MAX([DISTINCT] expr) [over_clause]

Dove expr è l'espressione per la quale vuoi il valore massimo.

La over_clause è una clausola facoltativa che funziona con le funzioni della finestra. Nota che la over_clause può essere utilizzato solo se non utilizzi il DISTINCT parola chiave.

Il DISTINCT (opzionale). la parola chiave può essere utilizzata per eliminare i valori duplicati.

Esempio di base

Innanzitutto, ecco i dati grezzi che utilizzeremo in questo esempio:

USE world;
SELECT Name, Population
FROM City
WHERE CountryCode = 'THA';

Risultato:

+-------------------+------------+
| Name              | Population |
+-------------------+------------+
| Bangkok           |    6320174 |
| Nonthaburi        |     292100 |
| Nakhon Ratchasima |     181400 |
| Chiang Mai        |     171100 |
| Udon Thani        |     158100 |
| Hat Yai           |     148632 |
| Khon Kaen         |     126500 |
| Pak Kret          |     126055 |
| Nakhon Sawan      |     123800 |
| Ubon Ratchathani  |     116300 |
| Songkhla          |      94900 |
| Nakhon Pathom     |      94100 |
+-------------------+------------+

Possiamo usare il MAX() funzione per trovare la città con la popolazione più numerosa (ovvero la riga con il valore massimo nella colonna relativa alla popolazione).

USE world;
SELECT MAX(Population) AS 'Maximum Value'
FROM City
WHERE CountryCode = 'THA';

Risultato:

+---------------+
| Maximum Value |
+---------------+
|       6320174 |
+---------------+

La clausola GROUP BY

Possiamo usare il GROUP BY clausola per elencare ogni paese, insieme alla popolazione della città più grande di quel paese (per popolazione):

USE world;
SELECT District, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Risultato:

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| New South Wales |   3276207 |
| Victoria        |   2865329 |
| Queensland      |   1291117 |
| West Australia  |   1096829 |
| South Australia |    978100 |
| Capital Region  |    322723 |
| Tasmania        |    126118 |
+-----------------+-----------+

La clausola ORDER BY

Possiamo anche usare il ORDER BY clausola per specificare una colonna con cui ordinare per:

USE world;
SELECT District, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Max Value` ASC;

Risultato:

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| Tasmania        |    126118 |
| Capital Region  |    322723 |
| South Australia |    978100 |
| West Australia  |   1096829 |
| Queensland      |   1291117 |
| Victoria        |   2865329 |
| New South Wales |   3276207 |
+-----------------+-----------+

Questo ordina i risultati in ordine crescente, che elenca per primo il valore minimo.

Nota che, quando ordini con un alias composto da più parole (come `Max Value` ), devi utilizzare il carattere di apice inverso (` ) invece dell'apostrofo (' ) per racchiudere le due parole.

Trova la lunghezza massima dei caratteri

Il MAX() la funzione non è limitata alle sole colonne con dati numerici. Puoi anche combinare MAX() con altre funzioni per restituire i valori massimi in altre aree.

Ad esempio, utilizzando i nostri dati di esempio, possiamo trovare il valore con il numero massimo di caratteri nella City colonna:

SELECT MAX(CHAR_LENGTH(Name)) AS 'Maximum Character Length'
FROM city;

Risultato:

+--------------------------+
| Maximum Character Length |
+--------------------------+
|                       34 |
+--------------------------+

Possiamo anche vederlo usando la seguente query (che non coinvolge il MAX() funzione):

SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length` DESC
LIMIT 10;

Risultato:

+--------------------------------------+------------------+
| Name                                 | Character Length |
+--------------------------------------+------------------+
| Luxembourg [Luxemburg/Lëtzebuerg]   |               34 |
| Castellón de la Plana [Castell      |               31 |
| San Fernando del Valle de Cata       |               30 |
| Santo Domingo de los Colorados       |               30 |
| Thiruvananthapuram (Trivandrum       |               30 |
| [San Cristóbal de] la Laguna        |               29 |
| Ingraj Bazar (English Bazar)         |               28 |
| Soledad de Graciano Sánchez         |               28 |
| Valle de Chalco Solidaridad          |               27 |
| Machilipatnam (Masulipatam)          |               27 |
+--------------------------------------+------------------+

Utilizzo di una clausola OVER

Come accennato, la sintassi consente un OVER clausola da includere nelle vostre domande. Fondamentalmente, il OVER La clausola consente di specificare come suddividere le righe di query in gruppi per l'elaborazione mediante la funzione finestra.

Ecco un esempio:

SELECT 
    District,
    Name AS City,
    Population AS 'City Population',
    MAX(Population) OVER(PARTITION BY District) AS 'District Max'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY `District Max` DESC;

Risultato:

+-----------------+---------------+-----------------+--------------+
| District        | City          | City Population | District Max |
+-----------------+---------------+-----------------+--------------+
| New South Wales | Sydney        |         3276207 |      3276207 |
| New South Wales | Wollongong    |          219761 |      3276207 |
| New South Wales | Newcastle     |          270324 |      3276207 |
| New South Wales | Central Coast |          227657 |      3276207 |
| Victoria        | Melbourne     |         2865329 |      2865329 |
| Victoria        | Geelong       |          125382 |      2865329 |
| Queensland      | Townsville    |          109914 |      1291117 |
| Queensland      | Brisbane      |         1291117 |      1291117 |
| Queensland      | Cairns        |           92273 |      1291117 |
| Queensland      | Gold Coast    |          311932 |      1291117 |
| West Australia  | Perth         |         1096829 |      1096829 |
| South Australia | Adelaide      |          978100 |       978100 |
| Capital Region  | Canberra      |          322723 |       322723 |
| Tasmania        | Hobart        |          126118 |       126118 |
+-----------------+---------------+-----------------+--------------+

Questo esempio partiziona le righe per District , fornendo il valore massimo per ciascuna partizione (distretto). Ciò ti consente di visualizzare dati più dettagliati, come la popolazione di ciascuna città, insieme alla popolazione della città più grande nello stesso distretto.