按作为连接的一部分选择的字段排序-PostgreSQL

按作为连接的一部分选择的字段排序-PostgreSQL,postgresql,Postgresql,我想按一个字段排序,它是连接的一部分 例如: SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table ORDER BY field1; 这是否可以通过其他方式实现?我收到一个错误,说明我不能按未选择的字段排序 是否有一种方法可以选择一个字段,但使其不可见,以便我可以按其排序?这可以使用子查询或CTE来完成: 子查询: SELECT c.field3 FROM (SELECT DISTINCT(field1 ||' '||field2

我想按一个字段排序,它是连接的一部分

例如:

SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table ORDER BY field1;
这是否可以通过其他方式实现?我收到一个错误,说明我不能按未选择的字段排序


是否有一种方法可以选择一个字段,但使其不可见,以便我可以按其排序?

这可以使用子查询或CTE来完成:

子查询:

SELECT c.field3
FROM (SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field3;
SELECT c.field3
FROM (SELECT DISTINCT field1, (field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field1;
CTE:

也可以通过简单地重复所选表达式来完成,尽管我不喜欢这样做,因为代码重复:

SELECT DISTINCT(field1 ||' '||field2)
FROM Table
ORDER BY field1 ||' '||field2;
=======编辑=========

正如注释中指出的,按连接字段排序与仅按字段1排序并不完全相同。如果您确实希望仅按字段1进行排序,则必须执行以下操作:

子查询:

SELECT c.field3
FROM (SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field3;
SELECT c.field3
FROM (SELECT DISTINCT field1, (field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field1;
CTE:


distinct
不是一个函数。它不按
field1排序
field1是串联表达式的第一个组件,因此它将按field1排序;只是第二场还有第二场,我希望这不会取消资格。OP的问题是:为什么你不必按顺序提到字段2?不在所有的情况下,不。作为反例,考虑1行,“1”是“代码>(‘a’,‘c’)< /> >,第i个是<代码>(“AB”,“C”)< /代码> <代码> LCL CalATE= EnUUS。UTF-8<代码>。按字段1排序得到#1然后是#2,而按
field1 | |“|字段2
排序得到#2然后是#1。