降低排序重命名列

时间:2015-06-01 13:02:28

标签: postgresql postgresql-9.1

为什么:SELECT (users.email) AS renamed_column FROM users ORDER BY lower(renamed_column) DESC不起作用? (错误列renamed_column不存在)

我没有被SELECT lower(users.email) AS renamed_column FROM users ORDER BY renamed_column DESC强调,因为我希望原始值按较低的值排序。

PS:这是一个例子,事实上,'users.email'被一个子请求所取代。但是简单的字段或子请求存在问题。我不明白为什么带有重命名列的ORDER BY lower()失败。

2 个答案:

答案 0 :(得分:1)

您提供的别名renamed_column仅用于结果,并且只能在其他部分以有限的方式使用。 PostgreSQL documentation说明了ORDER BY条款:

  

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

因此它似乎可以ORDER BY renamed_column DESC,因为它是输出列,但如果它是“任意表达式”,它必须使用输入列值

所以这样做的唯一方法是

SELECT (users.email) AS renamed_column FROM users ORDER BY lower(users.email) DESC

答案 1 :(得分:0)

试试这个:

SELECT (users.email) AS renamed_column FROM users ORDER BY lower((users.email)) DESC