In PostgreSQL kann die Verwendung von Aliasen in einer ORDER BY-Klausel schwierig sein. Betrachten Sie die folgende Abfrage:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
Beim Ausführen dieser Abfrage in PostgreSQL 8.1.23 wird ein Fehler festgestellt: „FEHLER: Spalte „global_stock“ existiert nicht“. Um dieses Problem zu lösen, gibt es zwei Hauptansätze:
Der erste Ansatz besteht darin, nach der Spaltennummer statt nach dem Alias zu sortieren. In diesem Fall würde die Abfrage so aussehen:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
Hier bezieht sich „2“ auf die zweite Spalte, die der Alias „global_stock“ ist.
Ein alternativer Ansatz besteht darin, die ursprüngliche Abfrage in eine Unterabfrage zu packen und dann innerhalb der Unterabfrage nach dem Alias zu ordnen. Die Abfrage würde wie folgt aussehen:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) AS x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
In diesem Fall wird der Alias „global_stock“ innerhalb der Unterabfrage verwendet und die ORDER BY-Klausel wird auf die Ergebnismenge der Unterabfrage angewendet.
Das obige ist der detaillierte Inhalt vonWie verwendet man Aliase in der ORDER BY-Klausel von PostgreSQL richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!