0Pricing
SQL Academy · Lezione

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 n per semplici elenchi dei valori più alti o più bassi
  • Si aggiunga un criterio di spareggio univoco per ottenere risultati stabili
  • ROW_NUMBER() o DISTINCT ON per Top-N per gruppo
  • FETCH ... WITH TIES per 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

  1. Ordinare con ORDER BY
  2. Ordinare per più colonne
  3. LIMIT e OFFSET
  4. Trovare i record Top-N
← Torna a SQL Academy