如何在PostgreSQL ORDER BY子句中使用ALIAS?

j8ag8udp  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(147)

我有以下疑问:

  1. SELECT
  2. title,
  3. (stock_one + stock_two) AS global_stock
  4. FROM
  5. product
  6. ORDER BY
  7. global_stock = 0,
  8. title;

字符串
在PostgreSQL 8.1.23中运行它,我得到这个错误:

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

任何人都可以帮助我把它的工作?我需要的可用项目第一,他们之后的unnavailable项目。非常感谢!

rsaldnfx

rsaldnfx1#

你可以这样ORDER BY

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

字符串
或将其 Package 在另一个SELECT中:

  1. SELECT *
  2. from
  3. (
  4. select
  5. title,
  6. ( stock_one + stock_two ) as global_stock
  7. from product
  8. ) x
  9. order by (case when global_stock = 0 then 1 else 0 end) desc, title

展开查看全部
kqqjbcuj

kqqjbcuj2#

一个解决方案是使用位置:

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

字符串
但是,别名应该可以工作,但不一定是表达式。“global_stock = 0”是什么意思?您的意思是:

  1. select title,
  2. ( stock_one + stock_two ) as global_stock
  3. from product
  4. order by (case when global_stock = 0 then 1 else 0 end) desc, title

q1qsirdb

q1qsirdb3#

如果有人在谷歌上搜索你是否可以只ORDER BY my_alias时发现这个:是的,你可以。这花了我几个小时。
正如postgres文档所述:
序数指的是输出列的顺序(从左到右)位置。此功能可以根据没有唯一名称的列定义排序。这不是绝对必要的,因为始终可以使用AS子句为输出列分配名称。
所以,要么这个问题已经被修复了,要么这个问题是关于ORDER BY my_alias = 0, other_column语法的,我实际上并不需要。

相关问题