Ordinare per più colonne
Risolva i pareggi con chiavi di ordinamento secondarie
Ordinare per più colonne è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Il problema dei valori uguali
Quando ordina in base a una sola colonna, le righe con lo stesso valore non hanno un ordine definito tra loro. Tre prodotti con prezzo pari a 20 potrebbero essere restituiti in qualsiasi sequenza.
Per rendere l'ordine completamente prevedibile, aggiunga una seconda chiave di ordinamento.
-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;Elencare più chiavi di ordinamento
ORDER BY accetta un elenco di colonne separate da virgole. Il database ordina in base alla prima colonna, poi risolve i valori uguali usando la seconda e così via.
Qui i prodotti vengono ordinati in base al prezzo; a parità di prezzo, in ordine alfabetico per nome.
SELECT name, price
FROM products
ORDER BY price, name;L'ordine delle chiavi è importante
La sequenza delle colonne cambia il risultato. ORDER BY price, name non equivale a ORDER BY name, price.
La prima chiave è l'ordinamento principale; le chiavi successive contano solo quando quelle precedenti hanno lo stesso valore.
-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;Direzione per colonna
Ogni chiave di ordinamento può avere una propria direzione. Combini liberamente ASC e DESC.
In questo modo le categorie vengono raggruppate in ordine alfabetico, mentre all'interno di ciascuna categoria gli articoli più costosi vengono mostrati per primi.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;DESC si applica a ogni colonna singolarmente
Un errore comune consiste nel pensare che DESC alla fine inverta tutto. In realtà influisce solo sulla colonna che lo precede direttamente.
In ORDER BY category, price DESC, category è comunque in ordine crescente; solo price è in ordine decrescente.
-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;Tre o più chiavi
Può concatenare tutte le chiavi di ordinamento necessarie. Ciascuna entra in gioco solo quando tutte le chiavi precedenti hanno lo stesso valore.
Ordini gli ordini in base alla data, poi al cliente e infine al totale tra quelli dello stesso cliente e della stessa data.
SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;Un ordinamento stabile e deterministico
Per ottenere un risultato completamente deterministico, concluda le chiavi di ordinamento con una colonna univoca, come la chiave primaria. In questo modo non potranno mai esserci due righe a pari merito.
Questo è importante per la paginazione, che vedrà nella prossima lezione.
SELECT id, name, price
FROM products
ORDER BY price DESC, id;Combinare espressioni e colonne
Le chiavi di ordinamento possono combinare colonne semplici ed espressioni. Ogni chiave è indipendente.
In questo modo si ordina per valore dell'inventario decrescente e poi alfabeticamente per nome come criterio di spareggio.
SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;Ordinare in base a un booleano per portare un gruppo in cima
Un trucco utile consiste nell'ordinare in base a un'espressione booleana per portare un gruppo in cima o in fondo. In PostgreSQL, false viene prima di true.
In questo modo gli articoli disponibili (stock > 0) vengono mostrati per primi, quindi gli articoli meno costosi all'interno di ciascun gruppo.
SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;Controllare la posizione dei NULL
Per impostazione predefinita in PostgreSQL, NULL viene ordinato per ultimo in ordine crescente e per primo in ordine decrescente. Può modificare questo comportamento con NULLS FIRST o NULLS LAST su qualsiasi chiave.
SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;Mettere tutto insieme
Un ordinamento realistico su più chiavi può combinare direzione, espressioni e gestione dei NULL. Lo legga da sinistra a destra: ogni chiave perfeziona quella precedente.
SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
rating DESC NULLS LAST,
price ASC;Verifica rapida
Consideri ORDER BY category, price DESC.
Riepilogo
In breve, l'ordinamento su più colonne:
- Elenca le chiavi di ordinamento separate da virgole; le chiavi precedenti hanno la precedenza
- Ogni chiave ha il proprio
ASC/DESC - Concluda con una colonna univoca per ottenere un ordine deterministico
- Controlli i valori mancanti con
NULLS FIRST/NULLS LAST
Nella prossima lezione limiterà il numero di righe restituite con LIMIT e OFFSET.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;Domande Frequenti
La lezione «Ordinare per più colonne» è gratuita?
Sì — il testo completo di «Ordinare per più colonne» è 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 «Ordinare per più colonne»?
Risolva i pareggi con chiavi di ordinamento secondarie 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 2 di 4.
Quanto tempo richiede la lezione «Ordinare per più colonne»?
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