首页 >数据库 >mysql教程 >如何在 PostgreSQL 的 ORDER BY 子句中正确使用别名?

如何在 PostgreSQL 的 ORDER BY 子句中正确使用别名?

Barbara Streisand
Barbara Streisand原创
2024-12-31 11:42:10955浏览

How to Properly Use Aliases in PostgreSQL's ORDER BY Clause?

在 PostgreSQL ORDER BY 子句中按别名排序

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn