排序列#7爲例 -ORDER BY CASE和序號不工作
此代碼不會將數據在所有排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我將其更改爲硬-coded序數它的工作原理:
ORDER BY 7
排序列#7爲例 -ORDER BY CASE和序號不工作
此代碼不會將數據在所有排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我將其更改爲硬-coded序數它的工作原理:
ORDER BY 7
只要在SELECT
列表中相應的表述是同一類型的,你可以通過使用表達式本身,而不是SELECT
列表號做到這一點:
SELECT expression1, expression2, ...
...
ORDER BY CASE
WHEN 1=2
THEN expression5
WHEN 1=1
THEN expression7
ELSE expression13
END;
如果數據類型不同樣,季節與類型轉換。
由於在ORDER BY
中只能使用整數文字作爲列號,所以您的查詢不起作用。在所有其他情況下,整數只是它的常數值。
如果不是這樣,ORDER BY
表達式很容易變得模糊不清。請看下面:
... ORDER BY intcol + 3;
應該意味着「添加三個」或「從SELECT
列表」添加表情第三?
那麼一個案例和序數組合實際上是不可能的?我確實可以使用完整的列表達式來工作。 –
@JanineRawnsley:對。 [引自手冊](https://www.postgresql.org/docs/current/static/sql-select.html#SQL-ORDERBY)「*每個表達式可以是輸出列的名稱或序號(SELECT列表項),**或**它可以是由輸入列值組成的任意表達式*「 –
這是不可能的,是的。我已經給答案添加了一個解釋。 –
'1'='2'等被用於證明問題的目的。它們實際上是真正的/錯誤的表達。 –