ORDER BY输出列的小写

时间:2013-11-29 02:52:23

标签: sql postgresql sql-order-by postgresql-9.1

我可以毫无问题地运行这个Postgres查询:

select
(select product_types.name from product_types
 where product_types.id = products.product_type_id) AS product_type_name
 from products
order by product_type_name

但是当我尝试按小写订购时,它不起作用:

select
(select product_types.name from product_types
 where product_types.id = products.product_type_id) AS product_type_name
 from products
order by lower(product_type_name)

我收到此错误:

ERROR:  column "product_type_name" does not exist
LINE 4: order by lower(product_type_name)
                       ^

********** Error **********

ERROR: column "product_type_name" does not exist
SQL state: 42703
Character: 156

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:3)

乍一看,您的第一个查询可以这样重写:

select pt.name product_type_name from product_types pt
join products p on pt.id = p.product_type_id
order by pt.name

然后,使用lower函数进行排序只意味着将订单更改为:

order by lower(pt.name)

答案 1 :(得分:1)

引用manual page on SELECT

  

每个表达式可以是输出列的名称或序号   (SELECT列表项),或者它可以是由...形成的任意表达式   输入列值。

您试图通过由输出列形成的表达式进行排序,这是不可能的。