Spezifische Sortierung: ORDER BY id (3, 1, 2)

Hi!

Ist es möglich, eine Ergebnisliste nach einer spezifischen Reihenfolge zu sortieren?
Wie wäre dann die Syntax - habe in der Dokumentation nichts gefunden…

Ich könnte mir ja sowas vorstellen:

SELECT * FROM mytable
ORDER BY myfield IN (3,1,2);

Was aber nicht zu funktionieren scheint…

Gruß und Danke,
Thomas



test=# select * from my_order order by o;
  t  | o
-----+---
 bla | 1
 aaa | 2
 foo | 3
(3 rows)

test=*# select * from my_order order by case when o=3 then 1 end, case when o=1 then 2 end, case when o=2 then 3 end;
  t  | o
-----+---
 foo | 3
 bla | 1
 aaa | 2
(3 rows)

Das wird natürlich lustig, wenn die Tabelle a bisl größer wird. Was spricht gegen eine eigenständige Spalte, die die Sortierung beinhaltet? Oder kannst Du einen Rechenweg definieren, nach dem sortiert wird? PG kann auch nach dem Resultat einer Funktion sortieren, Beispiel:

test=# insert into my_order values ('xx', 10);
INSERT 0 1
test=*# select *, md5(t) from my_order order by md5(t);
  t  | o  |               md5
-----+----+----------------------------------
 bla |  1 | 128ecf542a35ac5270a87dc740918404
 aaa |  2 | 47bce5c74f589f4867dbd57e9ca9f808
 xx  | 10 | 9336ebf25087d91c818ee6e9ec29f8c1
 foo |  3 | acbd18db4cc2f85cedef654fccc4a4d8
(4 rows)

Andreas

Danke für die schnelle Antwort… Das funktioniert absolut wie gewünscht.
Die maximale Ergebnisliste ist ~5000, das sollte das DBMS noch schaffen…

Eine zusätzliche Spalte ist nicht möglich, da die Sortierreihenfolge von Benutzer zu Benutzer variiert.

Gruß,
Thomas