首页 > 数据库 > mysql教程 > 如何在 PostgreSQL ORDER BY 子句中使用别名而不出现'列不存在”错误?

如何在 PostgreSQL ORDER BY 子句中使用别名而不出现'列不存在”错误?

DDD
发布: 2024-12-29 12:18:10
原创
142 人浏览过

How Can I Use an Alias in a PostgreSQL ORDER BY Clause Without Getting a

在 PostgreSQL ORDER BY 子句中使用别名

尝试在 PostgreSQL 查询的 ORDER BY 子句中使用别名时,某些用户遇到错误“column不存在。”

问题解释

考虑以下示例:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;
登录后复制

在 PostgreSQL 8.1.23 中运行此查询会产生错误:“列 'global_stock' 不存在。”出现此错误的原因是 ORDER BY 子句中无法识别别名。

解决方案

有两种可能的解决方案:

1.数字排序:

您可以通过列在 SELECT 子句中的位置来引用列,而不是使用别名。在上面的示例中,“global_stock”别名对应于第 2 列。因此,修改后的查询将为:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    2, 1;
登录后复制

2。使用 CASE 表达式的子查询:

另一个选项是使用子查询和 CASE 表达式:

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;
登录后复制

在这种情况下,CASE 表达式将值 1 分配给具有'global_stock' = 0,所有其他均为 0。然后,查询根据该值对结果进行降序排序,有效地对可用项目进行优先级排序。

以上是如何在 PostgreSQL ORDER BY 子句中使用别名而不出现'列不存在”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板