聊一聊SQL自定義排序
?
今天給大家介紹幾種方法來求解這樣的問題,我們先看下示例表:
這張表的數(shù)據(jù)是隨機(jī)錄進(jìn)去的,下面我們希望按照我們指定的順序輸出為如下內(nèi)容:
注意:這里既沒有按照人口的多少排序,也沒有按照GDP的多少排序,更加沒有按照城市的拼音首字母排序,完全是按照我們自己的意愿進(jìn)行排序。
方法一 ORDER BY CASE WHEN
通過在ORDER BY的時(shí)候,我們對想要的輸出順序使用CASE WHEN,將文本轉(zhuǎn)化為可排序的數(shù)字來進(jìn)行間接排序,具體代碼如下:
* Citys
City=
City=
City=
City=
City=
此方法針對比較簡單的查詢?nèi)菀讓?shí)現(xiàn)自定義排序,在比較復(fù)雜場景中使用起來有限制。
方法二 UNION ALL
使用UNION ALL的方法容易理解,但是代碼會(huì)寫的比較復(fù)雜,具體如下:
a.City,a.Population,a.GDP
(
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
ALL
,* Citys City=
) a
a.Num
我們通過增加一列自定義的Num,給查詢出來的每一行記錄賦一個(gè)值,這個(gè)值是我們輸出的順序,再通過子查詢對這個(gè)自定義的Num進(jìn)行排序即可。時(shí)常用在比較復(fù)雜的查詢語句中,且需要自定義排序的場景下。
方法三 創(chuàng)建臨時(shí)表
相比上面兩種方法,創(chuàng)建臨時(shí)表的方法可以極大的減少代碼量。我們可以先創(chuàng)建一個(gè)按照我們希望輸出的順序的臨時(shí)表Temp,具體如下:
當(dāng)我們需要自定義排序輸出時(shí),可以直接關(guān)聯(lián)該臨時(shí)表,具體代碼如下:
a.* Citys a
Temp b a.City=b.City
b.Num
這種方法相對于上面兩種方法只需要更新臨時(shí)表中的順序即可,可以適應(yīng)各種不同的場景。?