在 PostgreSQL 中,在 ORDER BY 子句中使用別名可能會很棘手。考慮以下查詢:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
在 PostgreSQL 8.1.23 中執行此查詢時,遇到錯誤:「錯誤:列「global_stock」不存在」。要解決此問題,有兩種主要方法:
第一種方法是按列號而不是別名進行排序。在這種情況下,查詢將如下所示:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
這裡,「2」指的是第二列,即別名「global_stock」。
另一種方法是將原始查詢包裝在子查詢中,然後按子查詢中的別名進行排序。查詢將變為:
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;
在這種情況下,子查詢中使用別名“global_stock”,並且 ORDER BY 子句應用於子查詢的結果集。
以上是如何在 PostgreSQL 的 ORDER BY 子句中正確使用別名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!