我想按連接的一部分進行排序。按連接的一部分選擇的字段排序 - PostgreSQL
例如:
SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table ORDER BY field1;
這可能在一些其他的方式呢?我收到一個錯誤,指出我無法按未選中的字段排序。
有沒有辦法選擇一個字段,但使其不可見,以便我可以ORDER BY它呢?
我想按連接的一部分進行排序。按連接的一部分選擇的字段排序 - PostgreSQL
例如:
SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table ORDER BY field1;
這可能在一些其他的方式呢?我收到一個錯誤,指出我無法按未選中的字段排序。
有沒有辦法選擇一個字段,但使其不可見,以便我可以ORDER BY它呢?
這可以通過使用子查詢或CTE來完成或者:
子查詢:
SELECT c.field3
FROM (SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field3;
CTE:
WITH ConcatTable AS (
SELECT DISTINCT(field1 ||' '||field2) AS field3 from Table
)
SELECT field3 FROM ConcatTable ORDER BY field3;
它也可以通過簡單地重複所選擇的表達來完成,雖然我不喜歡因爲代碼重複:
SELECT DISTINCT(field1 ||' '||field2)
FROM Table
ORDER BY field1 ||' '||field2;
======編輯=========
正如在註釋中指出的那樣,連接字段的排序與字段1的排序並不完全相同。如果你真的想只是FIELD1進行排序,你會做這樣的事情:
子查詢:
SELECT c.field3
FROM (SELECT DISTINCT field1, (field1 ||' '||field2) AS field3 from Table) c
ORDER BY c.field1;
CTE:
WITH ConcatTable AS (
SELECT DISTINCT field1, (field1 ||' '||field2) AS field3 from Table
)
SELECT field3 FROM ConcatTable ORDER BY field1;
不按'field1'排序 –
Field1是連接表達式的第一個組件,因此它將按field1排序;這只是根據field2進行的二次排序,我希望這不會失去資格。 OP的問題:是否有某些原因讓你不能在ORDER BY中提及field2? –
並非在所有情況下,沒有。作爲一個反例,考慮2行,#1是'('a','c')',#2是'('ab','c')',其中'lc_collate = en_US.utf-8'。按字段1排序會給#1然後是#2,而用'field1 ||'排序'|| field2'給出#2然後#1。 –
'distinct'是** **不一個函數。 –