簡體   English   中英

如何在ORDER BY if語句中使用ASC / DESC?

[英]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)排序? 否定排名將導致該類型的相反順序。

編輯

由於rankingVARCHAR列,因此您需要將其轉換為數字才能使用此技術。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM