Wie man eine benutzerdefinierte Sortierreihenfolge für eine Unionsabfrage in Postgres hat
Mit einer Abfrage wie dieser (der Übersichtlichkeit halber vereinfacht):
SELECT 'East' AS name, *
FROM events
WHERE event_timestamp BETWEEN '2015-06-14 06:15:00' AND '2015-06-21 06:15:00'
UNION
SELECT 'West' AS name, *
FROM events
WHERE event_timestamp BETWEEN '2015-06-14 06:15:00' AND '2015-06-21 06:15:00'
UNION
SELECT 'Both' AS name, *
FROM events
WHERE event_timestamp BETWEEN '2015-06-14 06:15:00' AND '2015-06-21 06:15:00'
Ich möchte die Reihenfolge der resultierenden Zeilen anpassen. Etwas wie
ORDER BY name='East', name='West', name='Both'
Ode
ORDER BY
CASE
WHEN name='East' THEN 1
WHEN name='West' THEN 2
WHEN name='Both' THEN 3
ELSE 4
END;
Allerdings beschwert sich Postgres mit:
ERROR: invalid UNION/INTERSECT/EXCEPT ORDER BY clause
DETAIL: Only result column names can be used, not expressions or functions.
HINT: Add the expression/function to every SELECT, or move the UNION into a FROM clause.
Habe ich eine Alternative?