在PostgreSQL文档中
ORDER BY子句指定排序顺序:
SELECT select_list FROM table_expression ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }] [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]
排序表达式可以是在 查询的选择列表。一个例子是:
SELECT a, b FROM table1 ORDER BY a + b, c;
...
sort_expression也可以是列标签或编号 输出列,如:
两者均按第一输出列排序。请注意,输出 列名必须单独使用,即不能在 表达式-例如,这是不正确的:SELECT a + b AS sum, c FROM table1 ORDER BY sum; SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- wrong
进行此限制是为了减少歧义。仍然有歧义 如果ORDER BY项目是一个简单名称,可以与 输出列名或表表达式中的列。输出 在这种情况下使用列。仅当您 使用AS重命名输出列以匹配其他表列的 名称。
有人可以解释“输出列名称必须独立存在,即不能在表达式中使用”的意思吗?
第一个示例中的ORDER BY a+b
为什么正确,而最后一个示例中的ORDER BY sum+c
为什么不正确?
最后一个示例可以提供什么歧义?
谢谢。
答案 0 :(得分:1)
如果table1
有一个名为sum
的列,则不明确。如果没有该规则,解析器将不得不为每个名称考虑它是列名称还是表达式别名。按照规则,仅需考虑名称是否独立。因此,该规则可减少歧义。