[英]How use ASC/DESC inside a ORDER BY if statement?
問題是:“如何通過使用if值的sql語句排序?”
我有一個表,其中有一個參數,使用此參數,我必須按ASC或DESC排序單個列。 我怎樣才能實現它?
我知道ASC和DESC參數不能在IF塊中(並且具有類似這樣的結構。“ IF(Type ='1',等級,等級)ASC / DESC”),因此可以選擇訂購里面選擇一個參數的基礎?
例
該表是這樣的:
ID | RANKING | TYPE
--------------------
1 | 12 | 1
2 | 10 | 1
3 | 14 | 2
4 | 15 | 2
Type = 1必須是ASC順序,Type = 2必須是DESC順序,因此我的SELECT的預期結果可能是:
ID | RANKING | TYPE
--------------------
2 | 10 | 1
1 | 12 | 1
4 | 15 | 2
3 | 14 | 2
有什么想法嗎?
ORDER BY type
, CASE WHEN type = 1
THEN ranking
ELSE NULL --- implied, this line can be omitted
--- or changed into: ELSE ''
--- or: ELSE someConstant
END
, ranking DESC
按IF(type=2, -ranking, ranking)
排序后如何按IF(type=2, -ranking, ranking)
排序? 否定排名將導致該類型的相反順序。
編輯
由於ranking
是VARCHAR
列,因此您需要將其轉換為數字才能使用此技術。
SELECT * FROM test ORDER BY type ASC, CAST(ranking as SIGNED)*IF(type = 1, 1, -1) ASC;
您可以直接在sqlfiddle中測試代碼
不確定您要獲得什么:“ ...在基於參數的選擇內進行排序。” -您不小心在那兒說了幾句話。
但是,如果這樣做有幫助,您可以按以下多個字段進行排序:
... ORDER BY type ASC, ranking DESC
並按派生值排序:
... ORDER BY IF(ranking = 2, 1, 0) DESC, ranking ASC
這將首先放置所有“ ranking = 2”記錄,然后將其他所有排名記錄升序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.