9th Dec 2022 Tempo di lettura: 6 minuti Come usare CASE in ORDER BY in SQL Tihomir Babic sql imparare sql CASE Indice Che cos'è un'istruzione CASE? CASE in SELECT CASE si usa solo nelle dichiarazioni SELECT? Quando si usa l'istruzione CASE in un ORDER BY? CASO in ORDER BY Altri usi dell'istruzione CASE Volete saperne di più sull'istruzione CASE? Questo articolo vi mostrerà come e quando usare CASO in una clausola ORDINE PER in una clausola ORDER BY. Avete mai usato un'istruzione CASE? Sicuramente sì, almeno in un'istruzione SELECT. Ma l'avete mai usata in una clausola ORDER BY? No? Lo farete, quando vi mostrerò come fare! Non preoccupatevi se non avete mai usato un'istruzione CASE. Ve la mostrerò e spiegherò con un breve esempio. Poi passerò ad altri usi dell'istruzione CASE, in particolare in una clausola ORDER BY. Se volete più fonti di conoscenza, ecco un articolo che spiega cos' èCASE. E un altro che spiega come usare CASE per aggiungere logica a una SELECT. Che cos'è un'istruzione CASE? In parole povere, è un'istruzione SQL che esamina e restituisce valori in base alle condizioni specificate. È il modo in cui SQL scrive la logica IF-THEN-ELSE e consiste in cinque parole chiave: CASE, WHEN, THEN, ELSE e END. Quando viene utilizzata in un'istruzione SELECT, funziona in questo modo: se la condizione è soddisfatta, la condizione è soddisfatta. caso quando la condizione è soddisfatta, allora restituisce un certo valore, oppure else restituire un altro valore e fine controllare le condizioni. La sintassi è la seguente: CASE WHEN THEN , WHEN THEN ELSE END AS Credo che questa sintassi si spieghi meglio con un esempio. L'uso più elementare di CASE è in un'istruzione SELECT, quindi iniziamo con un esempio. CASE in SELECT Ecco la tabella films che utilizzerò in questo esempio: idfilm_titleyeardirector 1True Grit2010The Coen Brothers 2Da 5 Bloods2020Spike Lee 3Alien1979Ridley Scott 4The Bridges Of Madison County1995Clint Eastwood 5Get Out2017Jordan Peele 6Annie Hall1977Woody Allen 7Goodfellas1990Martin Scorsese 8Dr.Strangelove1964Stanley Kubrick 9You Were Never Really Here2017Lynne Ramsay 10Albert Nobbs2011Rodrigo Garcia Supponiamo di voler scrivere una query che, oltre alle colonne della tabella, mostri un'ulteriore colonna con il secolo in cui il titolo è stato girato. Un esempio di query è questo: SELECT *, CASE WHEN year < 2001 THEN '20th-century film' ELSE '21st-century film' END AS century FROM films; Questa query seleziona tutte le colonne della tabella films. Poi utilizza un'istruzione CASE per inserire i valori in una nuova colonna chiamata secolo. Questa istruzione significa: quando la colonna anno è inferiore a (cioè più vecchia di) 2001, allora il valore nella colonna secolo deve essere "film del XX secolo". In caso contrario, il valore dovrebbe essere "film del XXI secolo". Vediamo i risultati della query: idfilm_titleyeardirectorcentury 1True Grit2010The Coen Brothers21st-century film 2Da 5 Bloods2020Spike Lee21st-century film 3Alien1979Ridley Scott20th-century film 4The Bridges Of Madison County1995Clint Eastwood20th-century film 5Get Out2017Jordan Peele21st-century film 6Annie Hall1977Woody Allen20th-century film 7Goodfellas1990Martin Scorsese20th-century film 8Dr.Strangelove1964Stanley Kubrick20th-century film 9You Were Never Really Here2017Lynne Ramsay21st-century film 10Albert Nobbs2011Rodrigo Garcia21st-century film CASE si usa solo nelle dichiarazioni SELECT? No! Anche se viene usato più spesso, CASE non si limita alle dichiarazioni SELECT. Ad esempio, è possibile utilizzarlo in clausole come IN, WHERE, HAVING e ORDER BY. L'uso di un'istruzione CASE in una query una sola volta non significa che sia stata raggiunta la quota di utilizzo. È possibile utilizzarla più volte in una singola query. Oppure si può usare una sola volta. Ciò significa che non è necessario avere CASE in SELECT se si vuole usarlo solo in un ORDER BY. A questo proposito, lo scopo principale di questo articolo è mostrare come funziona l'istruzione CASE in una clausola ORDER BY. Ora ci sto arrivando. Quando si usa l'istruzione CASE in un ORDER BY? La clausola ORDER BY viene utilizzata per ordinare i risultati in ordine crescente o decrescente. Volete un ripasso su come funziona? Nessun problema! Questo articolo spiega cosa fa un ORDER BY. L'introduzione di un'istruzione CASE può migliorare il vostro ORDER BY sistema, consentendovi di ordinare i risultati in base ad altri (e molteplici) criteri. Ad esempio, è possibile utilizzarla quando si desidera ordinare i valori delle stringhe in base a criteri diversi dall'ordine alfabetico, ad esempio in base alla posizione gerarchica dei titoli di lavoro in un'azienda. L'uso dell'istruzione CASE consente anche di ordinare i dati in base a più criteri. Ad esempio, potreste voler ordinare i vostri utenti in base al paese e al nome, ma anche in base al paese e allo stato, se provengono dagli Stati Uniti. Vi mostrerò un esempio pratico e capirete subito di cosa sto parlando. CASO in ORDER BY In questo caso, lavoreremo con la tabella shopsche contiene i seguenti dati: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 2Ante PortasCroatiaNULLRijeka 3Green Mile 1USATennesseeMemphis 4Jan Pieter's PitaCroatiaNULLSplit 5Green Mile 2USATennesseeChattanooga 6Green Mile 3USANew OrleansLouisiana 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 9Green Mile 4USACaliforniaSan Francisco 10FragolaCroatiaNULLOsijek Per prima cosa dobbiamo ordinare i dati per country. Poi, ogni negozio all'interno dello stesso Paese deve essere ordinato per city. Se il negozio si trova negli Stati Uniti, dobbiamo ordinarlo in base alla colonna state. Il codice che risolve questo piccolo problema è il seguente: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END; Seleziona tutte le colonne della tabella shops. Quindi ordina i risultati prima in base al Paese e poi in base ai criteri dell'istruzione CASE. Dice che se country = 'USA', allora il risultato è ordinato per stato. Se non lo è, viene ordinato per city. Sembra che questo codice restituisca effettivamente il risultato desiderato: idshop_namecountrystatecity 10FragolaCroatiaNULLOsijek 2Ante PortasCroatiaNULLRijeka 4Jan Pieter's PitaCroatiaNULLSplit 1Zoltan's shopCroatiaNULLZagreb 8Quinn & SandyHungaryNULLGyor 7Krystyna's shopHungaryNULLPecs 9Green Mile 4USACaliforniaSan Francisco 6Green Mile 3USANew OrleansLouisiana 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis Altri usi dell'istruzione CASE È possibile utilizzare l'istruzione CASE anche con parole chiave diverse da quelle citate. Ad esempio, si può usare con DESC. Supponiamo di inserirla nel codice precedente: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END DESC; Nell'esempio precedente, ho omesso la parola chiave DESC. Il risultato è ordinato in ordine crescente per impostazione predefinita. Scrivendo DESC dopo l'istruzione CASE, si ottengono i negozi all'interno dei Paesi ordinati da city in ordine decrescente e non crescente come nel caso precedente. I negozi statunitensi sono ordinati da state, ma questa volta in ordine decrescente. Il risultato è visibile qui: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 4Jan Pieter's PitaCroatiaNULLSplit 2Ante PortasCroatiaNULLRijeka 10FragolaCroatiaNULLOsijek 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis 6Green Mile 3USANew OrleansLouisiana 9Green Mile 4USACaliforniaSan Francisco È possibile utilizzare le istruzioni CASE anche con UPDATE, INSERT e DELETE. Si tratta delle cosiddette istruzioni di modifica dei dati. Qui trovate un articolo che spiega come usare CASE con queste istruzioni. È possibile utilizzarlo anche per il riepilogo condizionale. Volete saperne di più sull'istruzione CASE? Probabilmente vi sorprenderà il fatto che le istruzioni CASE non sono utilizzate solo nelle istruzioni SELECT. L'avete vista utile quando viene usata con un'istruzione ORDER BY. Essa apre le possibilità di ordinare i risultati delle query. Ma non è finita qui. L'istruzione CASE può essere usata con altre istruzioni e parole chiave, come le istruzioni di modifica dei dati o anche DESC, IN, WHERE e HAVING. Ora è il momento di imparare di più e di mettere in pratica ciò che si è imparato. Tutto questo è possibile con il nostro corso Standard SQL Functions . Questo corso fa parte di un percorso molto più ampio denominato SQL from A to Z. Cosa state aspettando? Tags: sql imparare sql CASE