PostgreSQL:在 ORDER BY 中使用别名对结果进行排序
在 PostgreSQL 中,在 ORDER BY 子句中使用别名可能会带来挑战。如提供的查询所示,直接在 ORDER BY 中引用别名可能会导致错误消息。
错误说明:
PostgreSQL 要求 ORDER BY 子句引用结果集中存在的列。在这个查询中,别名“global_stock”与最终结果集中的列不对应,因此出现错误。
解决方案:
有两种方法解决此问题的方法:
方法 1:重新排序 SELECT列表:
重新排序 SELECT 列表,以便别名显示为第二个(或后续)表达式。以下查询将起作用:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
此重新排序可确保在 ORDER BY 子句中正确引用别名。
方法 2:使用子查询:
创建一个包装原始 select 的子查询,并在外部查询的 ORDER BY 子句中使用别名。例如:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
在此子查询方法中,在嵌套 SELECT 语句中使用别名“global_stock”,然后在外部查询中对嵌套结果集进行排序。
以上是如何在PostgreSQL的ORDER BY子句中正确使用别名?的详细内容。更多信息请关注PHP中文网其他相关文章!