我有以下查询:
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
global_stock = 0,
title;
在 PostgreSQL 8.1.23 中运行它我得到这个错误:
查询失败:错误:列“global_stock”不存在
任何人都可以帮我把它工作?我首先需要可用的项目,然后是不可用的项目。非常感谢!
你总是可以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
一种解决方案是使用以下位置:
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
万一有人在谷歌搜索你是否可以时发现这个ORDER BY my_alias
:是的,你可以。这花了我几个小时。
正如postgres 文档所说:
序数是指输出列的序数(从左到右)位置。此功能可以根据没有唯一名称的列定义排序。这绝不是绝对必要的,因为总是可以使用该
AS
子句为输出列分配名称。
所以要么这个问题已经修复,要么这个问题专门关于ORDER BY my_alias = 0, other_column
我实际上不需要的语法。