SQL: Ordinare il risultato di una query in base ad un ordine arbitrario



In SQL è possibile ordinare il risultato di una query per mezzo dell clausola ORDER BY seguita dal nome del campo che vogliamo ordinare.

L’ordinamento verrà eseguito a seconda del tipo di dato che il campo contiene: se un numero viene usato l’odrine numerico, se una stringa (varchar) viene usato l’ordine alfabetico, se un timestamp allora viene usato l’ordine temporale e così via.

Può capitare però di avere un campo al quale vogliamo applicare un ordinamento arbitrario; in questo caso i criteri di ordinamento predefiniti non vanno più bene. Vediamo con un esempio come questo può essere risolto.

Supponiamo di avere una tabella UTENTI contenente una colonna TIPO_UTENTE di tipo VARCHAR, la quale ci serve a precisare se un utente è amministratore, utente normale, utente occasionale o altro.
Una situazione di esempio può essere la seguente:

COGNOME TIPO_UTENTE
Rossi Avanzato
Bianchi Occasionale
Neri Amministratore
Belli Tecnico
Verdi Sviluppatore

Come possiamo ordinare la tabella in base al campo TIPO_UTENTE? Utilizzare l’ordinamento alfabetico può essere utile, ma a volte poco significativo. Se vogliamo fare in modo che la tabella venga ordinata in base ai privilegi degli utenti (Amministratore è quello che ha più privilegi, Tecnico quello che ne ha meno) è necessario impostare un ordine arbitrario come segue:


select * from UTENTI order by
case TIPO_UTENTE
when Amministratore then 1
when Sviluppatore then 2
when Avanzato then 3
when Occasionale then 4
when Tecnico then 5
else 99
end;

In questo modo, se ordiniamo in ordine ascendente allora avremo prima tutti gli utenti amministratori, seguiti dagli sviluppatori e così via.

Annunci sponsorizzati:

Ricerche effettuate:

  • ORDINARE LA LISTA IN ORDINE PER MESE SQL
Condividi su Facebook Condividi su Twitter!
Pinterest