Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

La funzione SQL MIN()

SQL dispone di una serie di potenti strumenti di aggregazione, tra cui la funzioneSQL MIN(). Questo articolo è una guida rapida all'estrazione e all'utilizzo dei valori minimi nelle query.

Nell'odierno ambiente aziendale, caratterizzato da una forte concorrenza, è fondamentale poter analizzare efficacemente i dati dell'organizzazione per prendere decisioni informate. Le funzioni aggregate di SQL consentono di eseguire qualsiasi tipo di analisi statistica sui dati.

Questo articolo è una guida di riferimento alla funzione SQL MIN(), che estrae l'elemento più piccolo da una colonna di dati.

Se siete alle prime armi con SQL, potreste essere interessati al nostro corso interattivo SQL per principianti. Partendo dal livello principiante, imparerete a conoscere le funzioni più utili di SQL. Imparerete i concetti di database relazionale, come estrarre i dati e come analizzarli utilizzando raggruppamenti e aggregati.

Vi collegherete a un database attraverso il browser per mettere in pratica le vostre nuove competenze con 129 esercizi interattivi. Il corso richiede circa 10 ore per essere completato.

Torniamo ora alla funzione MIN(). Inizieremo con l'esaminare il set di dati.

Dati di esempio

Tutti gli esempi di questo articolo utilizzano i dati riportati di seguito, che sono un sottoinsieme del database dei dipendenti di esempio di MySQL. I dati sono contenuti in una tabella denominata employee_data.

emp_nobirth_datefirst_namelast_namesalarydept_nameterm_date
100021984-06-02BezalelSimmel72527Sales2022-05-31
100041974-05-01ChirstianKoblick74057Production
100061973-04-20AnnekePreusig60098Development
100081978-02-19SaniyaKalloufi52668Development
100121980-10-04PatricioBridgland54794Development
100141976-02-12BerniGenin60598Development
100161981-05-02KazuhitoCappelletti77935Sales2020-12-31

Esempi semplici della funzione SQL MIN()

Esempio 1: Funzione MIN() semplice

La funzione MIN() estrae il valore minimo da una colonna. Nella sua forma più semplice, si potrebbe utilizzare la query sottostante per rispondere alla domanda: Quanto guadagna annualmente il dipendente con la retribuzione più bassa?

SELECT 
  MIN(salary) 
FROM employee_data;

I risultati sono i seguenti:

min(salary)
52668

Si noti che la funzione MIN(), come tutti gli altri aggregati SQL, è sempre seguita da un nome di colonna tra parentesi. In questo esempio, SQL cerca nell'intera tabella ed estrae il valore più basso per la colonna indicata.

Esempio 2: Utilizzo di MIN() con altre funzioni di aggregazione

Naturalmente, è possibile includere altre funzioni aggregate nei risultati, come questa:

SELECT 
  MIN(salary), 
  MAX(salary), 
  AVG(salary) 
FROM employee_data;

I risultati sarebbero simili a questo:

min(salary)max(salary)avg(salary)
526687793564668.143

Per ulteriori esempi, leggete Le funzioni SQL MIN() e MAX() spiegate in 6 esempi.

Esempio 3: Uso di MIN() con un'espressione aritmetica

È possibile utilizzare espressioni aritmetiche con la funzione MIN(). Se si volesse vedere il salario minimo mensile anziché il salario minimo annuale, la query sarebbe:

SELECT MIN(salary/12) AS min_monthly_salary
FROM employee_data;

Il risultato di questa query è:

min_monthly_salary
4389

Esempi non standard della funzione MIN()

Esempio 4: Uso di MIN() su colonne di data/ora

La funzione MIN() funziona altrettanto bene con i dati non numerici.

Può essere utilizzata con i tipi di dati data e datetime per estrarre la data o l'ora più vicina. Se si volesse trovare la data di nascita del dipendente più giovane dell'azienda, la query sarebbe simile a questa:

SELECT MIN(birth_date) 
FROM employee_data;

I risultati sono i seguenti:

min(birth_date)
20/4/1973

Esempio 5: Uso della funzione SQL MIN() su colonne di testo

Per i tipi di dati a stringa di caratteri come CHAR, VARCHAR e TEXT, la funzione SQL MIN() estrae dalla colonna il primo valore in ordine alfabetico.

Se si vuole trovare il primo nome di reparto in ordine alfabetico nella tabella employee_data tabella, la query sarebbe:

SELECT MIN(dept_name) 
FROM employee_data

Ecco i risultati:

min(dept_name)
Development

Si può notare che, anche se diversi dipendenti appartengono al reparto Sviluppo, il nome del reparto compare solo una volta nei risultati.

Utilizzo della funzione SQL MIN() con GROUP BY

La funzione MIN(), come tutte le funzioni aggregate di SQL, può essere utilizzata insieme alla clausola GROUP BY. Questa clausola indica a SQL di raggruppare le righe simili e di produrre una singola riga per ogni gruppo. Ad esempio, se si raggruppano i dati del campione per reparto, il set di risultati conterrà una riga per ogni reparto.

Se non avete ancora familiarità con la clausola GROUP BY e con il suo utilizzo, questi 5 esempi di GROUP BY possono aiutarvi.

Quando si usa la funzione MIN() insieme alla clausola GROUP BY, si vede il valore minimo in ogni gruppo. Ad esempio, se si volesse vedere lo stipendio più basso in ogni reparto, la query avrebbe il seguente aspetto:

SELECT 
  dept_name, 
  MIN(salary) 
FROM employee_data 
GROUP BY dept_name;

I risultati della query sarebbero questi:

dept_nameMIN(salary)
Sales72527
Production74057
Development52668

È possibile utilizzare anche la clausola ORDER BY. Se si desidera che i risultati siano in ordine di stipendio minimo, la query sarebbe:

SELECT 
  dept_name, 
  MIN(salary) 
FROM employee_data 
GROUP BY dept_name
ORDER BY MIN(salary);

L'insieme dei risultati appare quindi in ordine di stipendio minimo, dal più basso al più alto:

dept_nameMIN(salary)
Development52668
Sales72527
Production74057

Se ritenete di aver bisogno di un po' di pratica con il raggruppamento dei dati in SQL, troverete alcuni esercizi utili in 10 esercizi GROUP BY Pratica su SQL con soluzioni.

Uso della funzione MIN() in HAVING

È possibile utilizzare le funzioni aggregate per filtrare l'insieme dei risultati. Normalmente, i criteri di selezione vengono definiti con una clausola WHERE, ma non è possibile utilizzare WHERE per filtrare un aggregato. È necessario utilizzare la clausola HAVING.

Per trovare tutti i reparti in cui il salario minimo annuale è superiore a 60.000, la query dovrebbe essere:

SELECT dept_name, MIN(salary) 
FROM employee_data 
GROUP BY dept_name
HAVING MIN(salary) > 60000
ORDER BY MIN(salary);

Si noti che la clausola HAVING deve essere usata con la clausola GROUP BY e che è posta dopo la GROUP BY ma prima della ORDER BY.

I risultati sono:

dept_nameMIN(salary)
Sales72527
Production74057

I valori nulli influenzano la funzione MIN()?

La funzione SQL MIN() ignora le righe con un valore nullo quando calcola il minimo. Il valore restituito è quindi il valore più basso non nullo nella colonna specificata.

Nei dati di esempio, solo due righe hanno valori nella data di scadenza. In tutte le altre righe, questa colonna è impostata su NULL. Se si cerca la data di cessazione minima, si dovrebbe ottenere il valore più basso non nullo. Proviamo:

SELECT 
  MIN(term_date) 
FROM employee_data;

Questo restituisce la data più piccola, ignorando i valori nulli:

MIN(term_date)
31/12/2020

L'unica volta che la funzione MIN() restituirebbe un NULL sarebbe se tutti i valori della colonna fossero NULL.

Proseguire con la funzione MIN() di SQL

Abbiamo esplorato gli usi di MIN(), ma il vostro viaggio di apprendimento è appena iniziato: c'è molto altro da scoprire! Per una guida rapida all'uso della funzione SQL MIN(), consultate questi due libri di cucina:

Non c'è niente di meglio che la risoluzione di problemi pratici per imparare bene qualsiasi argomento. Il nostro percorsoPratica su SQL vi propone una serie di sfide simili a quelle che incontrerete nel mondo reale, con un aiuto sempre disponibile se vi bloccate.

Infine, LearnSQL.it offre una vasta gamma di corsi progettati per aiutarvi in ogni fase del vostro percorso di apprendimento. Se siete seriamente intenzionati a diventare esperti di SQL, vi consiglio il nostro percorso di apprendimento SQL dalla A alla Z. Questo percorso è composto da 7 corsi interattivi che vi accompagnano dai principianti alle funzioni avanzate.

Fate il passo successivo e date una spinta alla vostra carriera diventando esperti di SQL!