Il MySQL MIN()
function è una funzione aggregata che restituisce il valore minimo 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 minimo dalle righe restituite. Se non ci sono righe corrispondenti, MIN()
restituisce NULL
.
Ad esempio, puoi utilizzare questa funzione per scoprire quale città ha la popolazione più piccola da un elenco di città.
Sintassi
La sintassi di MIN()
va così:
MIN([DISTINCT] expr) [over_clause]
Dove expr
è l'espressione per la quale vuoi il valore minimo.
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 MIN()
funzione per trovare la città con la popolazione più piccola (ovvero la riga con il valore più piccolo nella colonna della sua popolazione).
USE world; SELECT MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'THA';
Risultato:
+---------------+ | Minimum Value | +---------------+ | 94100 | +---------------+
La clausola GROUP BY
Possiamo usare il GROUP BY
clausola per elencare ogni distretto, insieme alla popolazione della città più piccola di quel distretto (per popolazione):
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Risultato:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | New South Wales | 219761 | | Victoria | 125382 | | Queensland | 92273 | | 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, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Minimum Value` ASC;
Risultato:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | Queensland | 92273 | | Victoria | 125382 | | Tasmania | 126118 | | New South Wales | 219761 | | Capital Region | 322723 | | South Australia | 978100 | | West Australia | 1096829 | +-----------------+---------------+
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 `Minimum Value`
), devi utilizzare il carattere di apice inverso (`
) invece dell'apostrofo ('
) per racchiudere le due parole.
Trova la lunghezza minima dei caratteri
Il MIN()
la funzione non è limitata alle sole colonne con dati numerici. Puoi anche combinare MIN()
con altre funzioni per restituire valori minimi in altre aree.
Ad esempio, utilizzando i nostri dati di esempio, possiamo trovare il valore con il numero minimo di caratteri nella City
colonna:
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length' FROM city;
Risultato:
+--------------------------+ | Minimum Character Length | +--------------------------+ | 3 | +--------------------------+
Possiamo anche vederlo usando la seguente query (che non coinvolge il MIN()
funzione):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Risultato:
+------+------------------+ | Name | Character Length | +------+------------------+ | Ome | 3 | | Yao | 3 | | Qom | 3 | | Itu | 3 | | Tsu | 3 | | Ube | 3 | | Ise | 3 | | Uji | 3 | | Ede | 3 | | Ota | 3 | +------+------------------+
Dato che più città hanno la stessa lunghezza di caratteri, possiamo modificare questa query per restituire solo i valori distinti:
SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Risultato:
+------------------+ | Character Length | +------------------+ | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | +------------------+
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', MIN(Population) OVER(PARTITION BY District) AS 'District Minimum' FROM City WHERE CountryCode = 'AUS' ORDER BY `District Minimum` DESC;
Risultato:
+-----------------+---------------+-----------------+------------------+ | District | City | City Population | District Minimum | +-----------------+---------------+-----------------+------------------+ | West Australia | Perth | 1096829 | 1096829 | | South Australia | Adelaide | 978100 | 978100 | | Capital Region | Canberra | 322723 | 322723 | | New South Wales | Sydney | 3276207 | 219761 | | New South Wales | Wollongong | 219761 | 219761 | | New South Wales | Newcastle | 270324 | 219761 | | New South Wales | Central Coast | 227657 | 219761 | | Tasmania | Hobart | 126118 | 126118 | | Victoria | Melbourne | 2865329 | 125382 | | Victoria | Geelong | 125382 | 125382 | | Queensland | Townsville | 109914 | 92273 | | Queensland | Brisbane | 1291117 | 92273 | | Queensland | Cairns | 92273 | 92273 | | Queensland | Gold Coast | 311932 | 92273 | +-----------------+---------------+-----------------+------------------+
Questo esempio partiziona le righe per District
, fornendo il valore minimo per ciascuna partizione (distretto). Ciò ti consente di visualizzare dati più dettagliati, come la popolazione di ciascuna città, insieme alla popolazione della città più piccola (per popolazione) nello stesso distretto.