下排序重命名列

Lower sort renamed column

为什么这个: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() 失败。

试试这个:

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

您提供的别名renamed_column仅用于结果,在其他部分只能以有限的方式使用。 PostgreSQL documentation 关于 ORDER BY 子句的陈述:

Each expression can be the name or ordinal number of an output column (SELECT list item), or it can be an arbitrary expression formed from input-column values.

所以看起来ORDER BY renamed_column DESC是可以的,因为它是一个输出列,但是如果它是一个"arbitrary expression",它必须使用输入列值.

所以唯一的方法是

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