Domanda Come faccio a ordinare secondo un ordine specifico


Utenti della tabella:

id | firstname | lastname
---+-----------+---------
 1 | John      | Smith
 2 | Adam      | Tensta
 3 | Anna      | Johansson

Voglio selezionarli nell'ordine ID 2, 3, 1. SOLO specificato dal campo id. È possibile?

Sto pensando qualcosa di simile SELECT * FROM users ORDER BY id ORDER(2,3,1)

Questo può essere fatto, e in tal caso come?


12
2018-01-03 13:50


origine


risposte:


Dovrebbe funzionare con un caso nell'ordine da:

SELECT * 
FROM users 
ORDER BY case id when 2 then 1
                 when 3 then 2
                 when 1 then 3
         end

20
2018-01-03 14:01



Soluzione generica per Postgres 9.4 o successive

Per qualsiasi numero di valori. Passa semplicemente una serie di tipi corrispondenti con il tuo tipo di ordinamento preferito:

SELECT u.*
FROM   users u
LEFT   JOIN unnest('{2,3,1}'::int[]) WITH ORDINALITY o(id, ord) USING (id)
ORDER  BY o.ord;

Ordina le righe senza corrispondenza ultime perché ord è NULL quindi e quel tipo dura in ordine crescente.

Soluzioni simili possibili per le versioni precedenti senza ORDINALITY.

Relazionato:

Risposta originale per il caso semplice dato

SELECT * FROM users ORDER BY (id+1)%3

% è il modulo operatore.


0
2018-01-03 15:33