11

我有以下查询:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;

在 PostgreSQL 8.1.23 中运行它我得到这个错误:

查询失败:错误:列“global_stock”不存在

任何人都可以帮我把它工作?我首先需要可用的项目,然后是不可用的项目。非常感谢!

4

3 回答 3

20

你总是可以ORDER BY这样:

select 
    title, 
    ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

或将其包装在另一个 SELECT 中:

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
于 2012-08-02T20:59:16.490 回答
3

一种解决方案是使用以下位置:

select  title, 
        ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

但是,别名应该有效,但不一定是表达式。“global_stock = 0”是什么意思?你的意思是以下:

select  title, 
        ( stock_one + stock_two ) as global_stock
from product
order by (case when global_stock = 0 then 1 else 0 end) desc, title
于 2012-08-02T20:58:38.170 回答
1

万一有人在谷歌搜索你是否可以时发现这个ORDER BY my_alias:是的,你可以。这花了我几个小时。

正如postgres 文档所说:

序数是指输出列的序数(从左到右)位置。此功能可以根据没有唯一名称的列定义排序。这绝不是绝对必要的,因为总是可以使用该AS子句为输出列分配名称。

所以要么这个问题已经修复,要么这个问题专门关于ORDER BY my_alias = 0, other_column我实际上不需要的语法。

于 2021-04-21T10:34:21.577 回答