Quando lavori con i database, spesso vuoi vedere un certo ordine nei dati. Per esempio:
- "Fammi vedere la top-10 dei prodotti più costosi."
- "Quali ordini sono stati gli ultimi?"
- "Qual è l’età degli studenti, partendo dai più giovani?"
Voglia di ordinare i dati è super naturale: anche se sei un programmatore super figo, scavare in un mucchio di righe a caso non è proprio divertente. Ecco perché SQL ci offre uno strumento per ordinare le righe nel risultato — l’operatore ORDER BY.
Basi dell’ordinamento con ORDER BY
ORDER BY è tipo una bacchetta magica che ti permette di mettere in ordine le righe nel set di risultati. Senza di lui, i dati vengono restituiti in un ordine "casuale" (non è un bug del database, semplicemente l’ordine non è garantito).
Ecco come si presenta la sintassi di ORDER BY:
SELECT colonna1, colonna2
FROM tabella
ORDER BY colonna1 DESC;
colonna1: il nome della colonna su cui vuoi ordinare.ASC: ordinamento crescente (questo è il valore di default, quindi puoi anche non scriverlo).DESC: ordinamento decrescente.
Esempio
Supponiamo di avere una tabella students:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Ordinare gli studenti per età (in ordine crescente):
SELECT name, age
FROM students
ORDER BY age ASC;
Risultato:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Se cambi la direzione dell’ordinamento in decrescente:
SELECT name, age
FROM students
ORDER BY age DESC;
Il risultato sarà così:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Ordinamento per più colonne
A volte una sola colonna non basta per ordinare. Immagina che nel database ci siano più studenti con la stessa età e vuoi aggiungere un ordinamento extra, tipo per nome.
Ordinamento per più colonne:
SELECT colonna1, colonna2
FROM tabella
ORDER BY colonna1 DESC, colonna2 ASC;
Esempio per la seguente tabella:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Query:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Risultato:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Qui prima si ordina per età (crescente), e dentro ogni età — per nome in ordine alfabetico.
Ordinamento con alias
Se usi alias per le colonne, puoi anche ordinare per questi alias.
SELECT name AS "Nome", age AS "Età"
FROM students
ORDER BY "Età" DESC;
Risultato:
| Nome | Età |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Perché è importante? Perché prima non si poteva fare e c’erano problemi con l’ordinamento per colonne calcolate.
Ordinamento con colonne calcolate
SQL ti permette di fare calcoli direttamente nella query, e poi ordinare per il risultato di questi calcoli.
Esempio 1. Calcolo semplice
SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;
Risultato:
| name | age | doubled_age |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Esempio 2. Uso delle funzioni. Supponiamo di avere i prezzi dei prodotti nella tabella products:
| product_name | price |
|---|---|
| Prodotto A | 100 |
| Prodotto B | 200 |
| Prodotto C | 150 |
E ora ordiniamo per il prezzo arrotondato, moltiplicato per 0.9 (tipo con lo sconto). La funzione ROUND restituisce il numero arrotondato al decimale che vuoi.
SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;
Ecco il risultato:
| product_name | price | discounted_price |
|---|---|---|
| Prodotto A | 100 | 90 |
| Prodotto C | 150 | 135 |
| Prodotto B | 200 | 180 |
Applicazione pratica dell’ordinamento
L’ordinamento è fondamentale in questi scenari:
- Creazione di report, tipo la top-10 delle migliori vendite del mese.
- Visualizzazione dati per interfacce utente, tipo la lista degli ordini ordinata per data.
- Generazione di liste per l’analisi, tipo raggruppare per priorità.
Errori tipici con ORDER BY
Gli errori possono spuntare ovunque. Ecco alcune cose a cui stare attenti:
- Se provi a ordinare per una colonna che non esiste, ti becchi un errore:
column "not_a_column" does not exist. - Ordinare per un alias usato in una colonna calcolata può essere confusionario se l’alias è definito a un livello superiore.
- Se ti dimentichi di specificare la direzione di ordinamento, PostgreSQL userà
ASCdi default. Non è un errore, ma può dare risultati inaspettati.
Ora sai come gestire l’ordinamento in PostgreSQL con ORDER BY. Ricorda: dati ben organizzati sono metà del successo quando scrivi query SQL efficaci. Avanti con il prossimo argomento! 😉
GO TO FULL VERSION