0Pricing
SQL Interview Prep · Lezione

MIN, MAX e aggregazione non numerica

Aggregare date e stringhe e comprendere il significato di MIN applicato al testo

MIN, MAX e aggregazione non numerica è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.

MIN e MAX oltre i numeri

I candidati presumono che MIN e MAX funzionino solo sui numeri. Gli intervistatori amano chiedere: "Che cosa restituisce MAX(name)? E MIN(order_date)?"

La verità è che MIN e MAX funzionano con qualsiasi tipo ordinabile — numeri, date e stringhe. La vera competenza verificata è comprendere le regole di ordinamento di ciascun tipo.

Il caso numerico

Parta dal caso più familiare. Nelle colonne numeriche, MIN restituisce il valore più piccolo e MAX quello più grande. È semplice.

Come le altre funzioni di aggregazione, MIN e MAX ignorano i NULL. Un NULL non è mai il valore minimo o massimo: viene semplicemente ignorato. Se ogni valore è NULL, entrambe restituiscono NULL.

SELECT MIN(salary) AS lowest, MAX(salary) AS highest
FROM employees;

MIN e MAX sulle date

Le date e i timestamp sono completamente ordinabili, quindi MIN(order_date) restituisce la data più antica e MAX(order_date) quella più recente.

In questo modo si risponde a «quando è stato effettuato il primo ordine?» (MIN) e «qual è l’attività più recente?» (MAX) senza ordinare e limitare i risultati. È la soluzione idiomatica basata sugli insiemi.

SELECT
  MIN(order_date) AS first_order,
  MAX(order_date) AS latest_order
FROM orders;

Intervallo di date in un'unica query

Una domanda successiva comune è: «Da quanto tempo questo cliente è attivo?» Si combinano MIN e MAX e poi si calcola la differenza.

In questo modo si calcola l'intervallo tra il primo e l'ultimo ordine. La sintassi esatta della sottrazione varia a seconda del dialetto, ma l'idea di MIN/MAX è universale e dimostra che si possono esprimere gli intervalli in modo dichiarativo.

SELECT
  customer_id,
  MIN(order_date) AS first_order,
  MAX(order_date) AS last_order,
  MAX(order_date) - MIN(order_date) AS active_days
FROM orders
GROUP BY customer_id;

MIN e MAX sulle stringhe

Ecco l'aspetto che sorprende molte persone. Sulle colonne testuali, MIN e MAX usano un ordinamento lessicografico (alfabetico) basato sulla collation della colonna.

Quindi MIN(name) restituisce il nome che viene prima nell'ordinamento alfabetico e MAX(name) quello che viene dopo. MIN sull'insieme {'Carol', 'Alice', 'Bob'} restituisce 'Alice'; MAX restituisce 'Carol'.

SELECT MIN(name) AS first_alpha, MAX(name) AS last_alpha
FROM employees;
-- with Alice, Bob, Carol: 'Alice' and 'Carol'

Collation e distinzione tra maiuscole e minuscole

L'ordinamento delle stringhe dipende dalla collation, che controlla la distinzione tra maiuscole e minuscole e le regole locali. Con molte collation predefinite, le lettere maiuscole possono venire prima delle minuscole, quindi MAX di {'apple', 'Banana'} potrebbe riservare sorprese.

In un colloquio, specifichi che i risultati di MIN/MAX sulle stringhe dipendono dalla collation. Questa precisazione distingue una risposta imparata a memoria da una comprensione autentica.

Cosa NON significa MIN(text)

Un'idea errata frequente è che MIN(name) restituisca la stringa più corta o che MAX(name) restituisca quella più lunga. Non è così. Si tratta esclusivamente dell'ordine di ordinamento, non della lunghezza.

Se serve davvero la stringa più lunga, si ordina per LENGTH(name) e si seleziona la prima riga, oppure si usa MAX(LENGTH(name)) per ottenere solo la lunghezza. Non bisogna confondere l'ordinamento dei valori con la lunghezza.

SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;

MIN/MAX non combinano le colonne

Un'insidia importante: MIN e MAX operano indipendentemente su una singola colonna. Non restituiscono l'intera riga che contiene il valore minimo o massimo.

Se si scrive SELECT MIN(salary), name senza GROUP BY, non si ottiene il nome della persona con lo stipendio più basso — si ottiene un errore oppure un nome arbitrario, a seconda del dialetto. Per recuperare l'intera riga, si usano ORDER BY + LIMIT oppure una funzione finestra.

-- Wrong assumption: this does NOT give the lowest earner's name.
-- Correct approach to get the whole row:
SELECT name, salary
FROM employees
ORDER BY salary ASC
LIMIT 1;

Riepilogo del comportamento di NULL per MIN/MAX

Come SUM e AVG, MIN e MAX ignorano i NULL. Un NULL non è né il valore più piccolo né quello più grande.

  • Valori misti + NULL: i NULL vengono ignorati e vengono restituiti il minimo e il massimo effettivi.
  • Solo NULL o nessuna riga: MIN e MAX restituiscono NULL.

Questa coerenza tra le funzioni di aggregazione è un punto chiaro da ricordare: «Tutte le funzioni di aggregazione standard ignorano i NULL».

Inserirlo in un raggruppamento

MIN e MAX sono particolarmente utili con GROUP BY per trovare gli estremi di ogni gruppo. «Stipendio più alto per reparto» è un esempio classico.

Il risultato contiene una riga per reparto con lo stipendio massimo di quel reparto. Ricordi: viene restituito il valore, non il dipendente. Abbinare il nome al valore è un problema separato e molto comune.

SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;

Come rispondere con sicurezza

Una risposta efficace in un colloquio è: «MIN e MAX funzionano su qualsiasi tipo ordinabile. Per i numeri indicano il valore più piccolo e quello più grande; per le date la più antica e la più recente; per le stringhe usano l'ordine alfabetico determinato dalla collation della colonna. Ignorano i NULL e restituiscono NULL solo quando non esiste alcun valore non NULL. Restituiscono un singolo valore, non l'intera riga, quindi per recuperare la riga userei ORDER BY con LIMIT oppure una funzione finestra.»

Verifica rapida

Rifletta sull'aggregazione di stringhe.

Riepilogo

Tutto ciò che riguarda MIN e MAX:

  • Funzionano su qualsiasi tipo ordinabile: numeri, date e stringhe.
  • Per le stringhe usano l'ordine alfabetico/della collation, non la lunghezza.
  • Date: MIN = la più antica, MAX = la più recente.
  • Ignorano i NULL; se tutti i valori sono NULL o non ci sono righe, restituiscono NULL.
  • Restituiscono un valore, non l'intera riga — per quella si usano ORDER BY + LIMIT.

Prossimo argomento: cosa succede quando si usano funzioni di aggregazione senza GROUP BY.

Domande Frequenti

La lezione «MIN, MAX e aggregazione non numerica» è gratuita?

Sì — il testo completo di «MIN, MAX e aggregazione non numerica» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.

Cosa imparerò in «MIN, MAX e aggregazione non numerica»?

Aggregare date e stringhe e comprendere il significato di MIN applicato al testo Eserciti SQL Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Interview Prep?

Non è richiesta alcuna esperienza precedente. SQL Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «MIN, MAX e aggregazione non numerica»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Interview Prep?

Sì. Ogni lezione SQL Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. COUNT(*) contro COUNT(column) e COUNT(DISTINCT)
  2. SUM e AVG con i NULL
  3. MIN, MAX e aggregazione non numerica
  4. Aggregati senza GROUP BY
← Torna a SQL Interview Prep