Trovare i record Top-N
Recuperi i valori più alti e più bassi
Trovare i record Top-N è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 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 Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Che cos'è una query Top-N
Una query Top-N risponde a domande come "quali sono i 3 prodotti più costosi", "quali sono i 10 ordini più recenti" o "quali sono i 5 punteggi più bassi".
Si tratta semplicemente di un ordinamento seguito da un limite, ma è un'operazione così comune da meritare un nome.
-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;Record con i valori più bassi
Per ottenere i valori più piccoli, si inverta la direzione. Si ordini con ASC e si prendano i primi N per ottenere le righe meno costose, più vecchie o con il valore più basso.
-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;Aggiungere un criterio di spareggio
Se più righe condividono il valore di soglia, il database ne sceglie alcune arbitrariamente. Si aggiunga una chiave secondaria univoca per rendere il risultato stabile e riproducibile.
SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Top-N dopo il filtraggio
Top-N opera sull'insieme filtrato. Si inserisca prima una clausola WHERE per limitare i candidati, quindi si ordini e si applichi un limite.
In questo modo si trovano i 3 prodotti più costosi della categoria 'Libri'.
SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;Top-N dopo l'aggregazione
È possibile classificare anche valori calcolati. Si raggruppino e si aggreghino i dati, quindi si ordini il valore aggregato e si applichi un limite.
In questo modo si restituiscono i 5 clienti che hanno speso complessivamente di più.
SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;L'approccio con le funzioni di ranking
Le funzioni di finestra come ROW_NUMBER() assegnano un rango a ogni riga. Si racchiuda la query e si mantengano le righe il cui rango è basso. Questo approccio è adatto anche al caso "Top-N per gruppo".
SELECT name, price
FROM (
SELECT name, price,
ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
FROM products
) ranked
WHERE rn <= 3;RANK e ROW_NUMBER in caso di parità
ROW_NUMBER() assegna sempre numeri distinti, quindi restituisce esattamente N righe anche in caso di parità. RANK() assegna lo stesso numero alle righe a pari merito, quindi "top 3" può restituire più di 3 righe se c'è una parità al terzo posto.
SELECT name, price,
RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;Top-N per gruppo
Per ottenere il prodotto migliore in ogni categoria, si suddivida il ranking per categoria. PARTITION BY riavvia la numerazione per ogni gruppo.
SELECT category, name, price
FROM (
SELECT category, name, price,
ROW_NUMBER() OVER (
PARTITION BY category
ORDER BY price DESC
) AS rn
FROM products
) t
WHERE rn = 1;Una riga per gruppo con DISTINCT ON
DISTINCT ON di PostgreSQL è un modo compatto per selezionare la riga migliore di ogni gruppo. Si elenchi la colonna di raggruppamento, quindi si ordini in modo che la riga desiderata sia la prima all'interno di ogni gruppo.
SELECT DISTINCT ON (category)
category, name, price
FROM products
ORDER BY category, price DESC;Includere le parità con WITH TIES
Se si desiderano i primi 3 risultati includendo anche tutte le righe a pari merito con la terza, si utilizzi lo standard FETCH ... WITH TIES. Restituisce 3 righe, più quelle a pari merito con l'ultima.
SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;Un solo valore estremo
Per ottenere una sola riga, con il valore massimo o minimo, ORDER BY ... LIMIT 1 è lo schema più semplice, più chiaro e spesso più veloce di una sottoquery con MAX().
-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;Verifica rapida
Si desiderano i 3 prezzi più alti, ma in caso di parità al terzo posto si vogliono includere tutti i risultati a pari merito.
Riepilogo
Ora è possibile trovare i record Top-N in tutti i modi più importanti:
ORDER BY ... LIMIT nper semplici elenchi dei valori più alti o più bassi- Si aggiunga un criterio di spareggio univoco per ottenere risultati stabili
ROW_NUMBER()oDISTINCT ONper Top-N per gruppoFETCH ... WITH TIESper mantenere le righe a pari merito
Con questo si concludono ordinamento, limitazione e Top-N. Ora è possibile dare un ordine coerente a qualsiasi insieme di risultati.
SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Domande Frequenti
La lezione «Trovare i record Top-N» è gratuita?
Sì — il testo completo di «Trovare i record Top-N» è 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 Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Trovare i record Top-N»?
Recuperi i valori più alti e più bassi Eserciti SQL Academy 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 Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Trovare i record Top-N»?
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 Academy?
Sì. Ogni lezione SQL Academy 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
- Ordinare con ORDER BY
- Ordinare per più colonne
- LIMIT e OFFSET
- Trovare i record Top-N