Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL ORDER BY子句中使用别名?_Sql_Postgresql_Postgresql 8.1 - Fatal编程技术网

如何在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?现在我正在使用