我有以下查询:
select
title,
( stock_one + stock_two ) as global_stock
from product
order by
global_stock = 0,
title;
在PostgreSQL 8.1.23中运行它我收到此错误:
查询失败:错误:列“global_stock”不存在
有人可以帮我把它投入使用吗?我首先需要可用的项目,然后是不可用的项目。非常感谢!
答案 0 :(得分:13)
你总是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
答案 1 :(得分: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
答案 2 :(得分:0)
万一有人在谷歌搜索您是否可以只ORDER BY my_alias
时发现这一点:是的,您可以。这花了我几个小时。
作为 postgres docs 状态:
<块引用>序数指的是输出列的序数(从左到右)位置。此功能可以根据没有唯一名称的列定义排序。这从来都不是绝对必要的,因为始终可以使用 AS
子句为输出列分配名称。
所以要么此问题已被修复,要么此问题专门针对我实际上并不需要的 ORDER BY my_alias = 0, other_column
语法。