如何在PostgreSQL ORDER BY子句中使用别名?
我有以下疑问:如何在PostgreSQL ORDER BY子句中使用别名?,sql,postgresql,postgresql-8.1,Sql,Postgresql,Postgresql 8.1,我有以下疑问: SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title; 在PostgreSQL 8.1.23中运行时,出现以下错误: 查询失败:错误:“全局库存”列不存在 有人能帮我把它付诸实施吗?我首先需要可用的物品,然后是不可用的物品。非常感谢 一种解决方案是使用位置: select title,
SELECT
title,
(stock_one + stock_two) AS global_stock
FROM
product
ORDER BY
global_stock = 0,
title;
在PostgreSQL 8.1.23中运行时,出现以下错误:
查询失败:错误:“全局库存”列不存在
有人能帮我把它付诸实施吗?我首先需要可用的物品,然后是不可用的物品。非常感谢 一种解决方案是使用位置:
select title,
( stock_one + stock_two ) as global_stock
from product
order by 2, 1
但是,别名应该有效,但表达式不一定有效。你所说的“全球股票=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
您始终可以通过以下方式
订购:
select
title,
( stock_one + stock_two ) as global_stock
from product
order by 2, 1
或将其包装在另一个选择中:
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
如果有人在谷歌上搜索是否可以通过我的别名订购时发现这一点:是的,你可以。这花了我几个小时
作为国家:
序号是指输出列的序号(从左到右)位置。此功能允许根据没有唯一名称的列定义排序。这并非绝对必要,因为始终可以使用AS
子句为输出列指定名称
因此,要么这一问题已经解决,要么这个问题是关于我的别名为0的顺序,其他列的语法,我实际上并不需要这些语法。你救了我一天!我已经使用了第一个选项,这对我来说会更容易!非常感谢你!你能告诉我第二个选项是否比第一个慢很多吗?我在使用第一种解决方案进行分页时遇到问题,因为我使用的是LIMIT子句ton@Noobgrammer哎呀,这是一个非常古老的答案,我不建议再按2,1排序了@蓝脚不错。非常感谢。我认为这无论如何都不管用。我认为,COALESCE(2,1)
的计算结果总是2
,这就相当于orderby2
。不管怎样,没关系。在我的例子中,我认为实际上更好的做法是将COALESCE(MAX(c.created),p.created)作为posted\u at
添加到SELECT
之后的列列表中,然后按posted\u在DESC
排序。Postgres 8.1?你现在应该升级了@一匹没有名字的马,我正在尝试,我的主机现在只有这个版本。谢谢你的建议!那么你应该换一台主机。8.1已经失去支持超过2年了。@a_horse_,没有名字,我会试试,顺便问一下,你有没有建议一个好的主机更新Postgres?现在我正在使用