0Pricing
Coding Interview Prep · Lezione

Ordinare per espressioni e alias

Capire dove i riferimenti agli alias sono consentiti in ORDER BY e come ordinare usando una logica calcolata

Ordinare per espressioni e alias è una lezione Coding Interview Prep 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 Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.

ORDER BY è più flessibile di quanto si pensi

Un numero sorprendente di candidati ritiene che ORDER BY possa fare riferimento solo a colonne semplici. In realtà è possibile ordinare in base a espressioni, alias, posizioni delle colonne e logica CASE.

Gli intervistatori usano questo aspetto per verificare se comprende l'ordine logico di esecuzione delle query, perché ORDER BY viene eseguito dopo SELECT: è proprio per questo che qui gli alias funzionano, mentre non funzionano in WHERE.

Perché gli alias sono consentiti in ORDER BY

Ricordi l'ordine logico di esecuzione: FROM, WHERE, GROUP BY, HAVING, SELECT, quindi ORDER BY. Poiché SELECT viene eseguito prima di ORDER BY, gli alias delle colonne definiti in SELECT esistono già quando ORDER BY viene valutato.

Questo è il motivo preciso per cui un alias funziona in ORDER BY ma non in WHERE, una domanda che gli intervistatori amano collegare all'ordine di esecuzione.

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY annual_pay DESC;

Ordinamento tramite un'espressione originale

È anche possibile ripetere l'espressione completa in ORDER BY invece di usare l'alias. Entrambe le forme sono valide e il risultato è identico.

Usare l'alias è più chiaro ed evita di duplicare la logica, ma alcuni team preferiscono l'espressione esplicita per maggiore trasparenza. In un colloquio entrambe le risposte sono accettabili, purché sappia motivare la scelta.

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY salary * 12 DESC;

Ordinamento per posizione della colonna (ordinale)

È possibile ordinare in base alla posizione ordinale di un elemento dell'elenco SELECT: ORDER BY 2 ordina in base alla seconda colonna selezionata. È una forma concisa, ma fragile, perché riordinare l'elenco SELECT modifica silenziosamente l'ordinamento.

Consiglio per il colloquio: sappia che questa possibilità esiste e che generalmente è sconsigliata nel codice di produzione per ragioni di leggibilità e sicurezza.

SELECT name, hire_date
FROM employees
ORDER BY 2 DESC;

Ordinamento tramite un CASE calcolato

Un modello potente consiste nell'ordinare in base a un'espressione CASE per imporre un ordine personalizzato e non alfabetico. In questo esempio si portano in cima gli stipendi più alti utilizzando una priorità derivata.

CASE produce un rango di ordinamento che non corrisponde ad alcuna colonna propria; il motore lo valuta esclusivamente per l'ordinamento.

SELECT name, salary
FROM employees
ORDER BY CASE WHEN salary >= 100000 THEN 0 ELSE 1 END,
         salary DESC;

Ordinamento categoriale personalizzato

Le colonne di stato raramente vengono ordinate in modo sensato alfabeticamente. «attivo, in attesa, chiuso» in ordine alfabetico diventa «attivo, chiuso, in attesa», che è sbagliato. Un CASE associa ogni valore a un rango definito esplicitamente.

Si tratta di un requisito frequente nella reportistica e di un modo chiaro per dimostrare di saper controllare l'ordinamento oltre il semplice ordinamento naturale.

SELECT id, status
FROM orders
ORDER BY CASE status
           WHEN 'active'  THEN 1
           WHEN 'pending' THEN 2
           WHEN 'closed'  THEN 3
           ELSE 4
         END;

Ordinamento per risultato di una funzione

In ORDER BY è possibile usare qualsiasi funzione scalare. Ad esempio, si può ordinare senza distinguere tra maiuscole e minuscole con LOWER, oppure in base alla lunghezza di una stringa o a una parte della data.

Nota: avvolgere una colonna in una funzione durante l'ordinamento può impedire al motore di usare un indice su quella colonna, proprio come accade in WHERE.

SELECT name
FROM employees
ORDER BY LOWER(name) ASC;

Alias e aggregati nelle query con GROUP BY

In una query raggruppata capita spesso di ordinare in base a un aggregato. È possibile fare riferimento all'alias dell'aggregato in ORDER BY, ancora una volta perché SELECT viene eseguito per primo.

La query seguente conta gli ordini per cliente e li ordina in senso decrescente in base a tale conteggio, usando l'alias order_count.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;

La trappola della collisione dei nomi degli alias

Un caso limite apprezzato dagli intervistatori: cosa succede se l'alias ha lo stesso nome di una colonna reale? La maggior parte dei motori risolve un nome semplice in ORDER BY dando priorità all'alias dell'elenco SELECT, il che può sorprendere.

Se si assegna l'alias salary * 2 AS salary e poi si usa ORDER BY salary, l'ordinamento avviene in base al valore raddoppiato, non alla colonna sottostante. Eviti di riutilizzare i nomi delle colonne come alias per eliminare questa ambiguità.

SELECT salary * 2 AS salary
FROM employees
ORDER BY salary;

Combinazione di espressioni e direzioni

È possibile combinare tutti questi elementi in un'unica clausola: prima un'espressione, poi un alias e infine una colonna semplice, ciascuno con la propria direzione. L'esempio ordina prima in base a un livello di bonus calcolato in senso decrescente, poi in base al nome in senso crescente come criterio di spareggio.

Stratificare le chiavi in questo modo è una pratica fondamentale nelle query di reportistica reali.

SELECT name, salary,
       salary * 0.1 AS bonus
FROM employees
ORDER BY bonus DESC, name ASC;

Note sulla portabilità

Sebbene espressioni e alias in ORDER BY siano ampiamente supportati, durante i colloqui è bene ricordare alcuni aspetti:

  • Le posizioni ordinali (ORDER BY 2) sono standard, ma sconsigliate.
  • La visibilità degli alias in ORDER BY è coerente nei principali motori, diversamente da WHERE/HAVING.
  • SELECT DISTINCT impone una limitazione: è possibile usare ORDER BY solo con espressioni presenti nell'elenco SELECT.

Controllo rapido

Colleghi la visibilità degli alias all'ordine di esecuzione.

Riepilogo

Ordinamento tramite espressioni e alias:

  • ORDER BY accetta alias, espressioni grezze, funzioni, logica CASE e posizioni ordinali.
  • Gli alias funzionano perché, nell'ordine logico di valutazione, ORDER BY viene eseguito dopo SELECT.
  • Usi CASE per definire un ordinamento categoriale personalizzato.
  • Eviti nomi di alias che coincidono con colonne reali, per prevenire ambiguità.
  • Le funzioni nella chiave di ordinamento possono impedire l'utilizzo degli indici.

Domande Frequenti

La lezione «Ordinare per espressioni e alias» è gratuita?

Sì — il testo completo di «Ordinare per espressioni e alias» è 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 Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.

Cosa imparerò in «Ordinare per espressioni e alias»?

Capire dove i riferimenti agli alias sono consentiti in ORDER BY e come ordinare usando una logica calcolata Eserciti Coding 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 Coding Interview Prep?

Non è richiesta alcuna esperienza precedente. Coding 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 4 di 4.

Quanto tempo richiede la lezione «Ordinare per espressioni e alias»?

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 Coding Interview Prep?

Sì. Ogni lezione Coding 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. Ordinamento su più colonne e posizione dei NULL
  2. LIMIT, OFFSET e FETCH FIRST
  3. Restituire in modo affidabile le righe Top-N
  4. Ordinare per espressioni e alias
← Torna a Coding Interview Prep