以下內(nèi)容參考w3school中關(guān)于SQL的教學(xué),可以點(diǎn)擊藍(lán)字參考原文。
一、Order By的定義
ORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。
ORDER BY 語(yǔ)句默認(rèn)按照升序對(duì)記錄進(jìn)行排序。
如果您希望按照降序對(duì)記錄進(jìn)行排序,可以使用 DESC 關(guān)鍵字。
注:對(duì)字符串排序的時(shí)候會(huì)按首字符的ASCII值排列,如果首字符相同,則向后看一位。
二、Order By的使用方法
原始的表 (用在例子中的):
Orders 表:
Company | OrderNumber |
---|---|
IBM | 3532 |
W3School | 2356 |
Apple | 4698 |
W3School | 6953 |
實(shí)例 1
以字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
Company | OrderNumber |
---|---|
Apple | 4698 |
IBM | 3532 |
W3School | 6953 |
W3School | 2356 |
實(shí)例2
以字母順序顯示公司名稱(Company),并以數(shù)字順序顯示順序號(hào)(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
結(jié)果:
Company | OrderNumber |
---|---|
Apple | 4698 |
IBM | 3532 |
W3School | 2356 |
W3School | 6953 |
看此結(jié)果和上一結(jié)果不同之處在于,Company值相同的行,排序按照OrederNumber的升序排列。
實(shí)例 3
以逆字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
結(jié)果:
Company | OrderNumber |
---|---|
W3School | 6953 |
W3School | 2356 |
IBM | 3532 |
Apple | 4698 |
實(shí)例 4
以逆字母順序顯示公司名稱,并以數(shù)字順序顯示順序號(hào):
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
結(jié)果:
Company | OrderNumber |
---|---|
W3School | 2356 |
W3School | 6953 |
IBM | 3532 |
Apple | 4698 |
注意:在以上的結(jié)果中有兩個(gè)相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時(shí),第二列是以升序排列的。如果第一列中有些值為 nulls 時(shí),情況也是這樣的。
三、可能出現(xiàn)問題
問題描述
Mysql排序時(shí)如果用的字段為字符型,排序出來(lái)時(shí)這樣的:
1,10,2,20,3,4,5
這種排序是按照字符從第一個(gè)字符開始比較出來(lái)的,但不是我們想要的,我們想要的是:
1,2,3,4,5……,10,20
解決方案
排序時(shí),把相應(yīng)的字段轉(zhuǎn)換成整型,使用CAST函數(shù),如下:
CAST(seat_row AS UNSIGNED)
將seat_row列轉(zhuǎn)換為UNSIGNED的數(shù)值類型。