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);
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)