在 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中文网其他相关文章!