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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage