iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 17

第十七日-大到小小到大的資料排序:ORDER BY

  • 分享至 

  • xImage
  •  

當我們撈到資料時,
往往會希望能將資料照某個欄位由大到小或是由小到大排序,
例如說班級通訊錄會照座號由小到大排序,
或是商業銷售報表會希望照銷售總額由大到小排序,
這時候就需要ORDER BY。

ORDER BY是排序語法,
一般會寫在句尾,
也就是當我們跟資料庫說「撈出性別是男生的資料」,
資料庫就會去撈,
撈完以後,我們再說「照座號排序」。
也就是:
先撈資料再排序
畢竟沒撈出東西,哪來的資料排序?

對ORDER BY而言,預設是由小到大排序
如果有由大到小排序的需求,
或是想將語法寫得比較清楚,標示出由小到大,
就需要下面兩個語法

ASC 由小到大排序
DESC 由大到小排序

  • 基本排序

order by 通常會放在句尾,
也就是將資料選出後,才會進行排序,
order by 如果後面沒有特別寫DESC的話,
預設是從小到大(ASC)排序的。
語法

  1. 選取資料
  2. ORDER BY
  3. 欄位(排順序用的)
  4. DESC或ASC (沒寫的話就是ASC)
SELECT * FROM Education.student WHERE gender="F" ORDER BY start_date;
SELECT * FROM Education.student ORDER BY start_date DESC;
  • 複合排序

ORDER BY 可以用兩個欄位排序,
例如說國中月考,會說依照總分排名,
同分的話,就比作文成績,
這就是ORDER BY 總分,作文成績。

下面語法就是先照class排順序,再照開始日期排序。

SELECT * FROM Education.student ORDER BY class,start_date;
  • 可以加DESC

複合排序一樣可以加上DESC,
下面語法是先照class欄位由小到大排,
同class再照start_date從大到小排序。

SELECT * FROM Education.student ORDER BY class,start_date DESC;
  • 不同的變數,ASC和DESC是分開寫的

從剛剛的粒子可以看到我們加了DESC,
但只作用在start_date上,
因為不同的變數ASC和DESC是分開寫的,
所以每個ORDER BY後面的欄位都可以加上ASC或是DESC,
如果沒有加的話,一樣預設是由小到大。

下面語法是先照class欄位由大到小排,
同class再照start_date從大到小排序。

SELECT * FROM Education.student ORDER BY class DESC,start_date DESC;
  • ORDER BY搭上LIMIT

ORDER BY可以搭上昨天寫的LIMIT,
先排序,再指定要選幾行。

例如說選出所有的學生,
照class由大到小排序,
再用LIMIT選出排序後的第五個人後的一個人,
也就是排序後的第六個人。

SELECT * FROM Education.student ORDER BY class DESC,start_date DESC LIMIT 1 OFFSET 5;

上一篇
第十六日-想取幾筆就取幾筆資料:Limit
下一篇
第十八日-新手資料表設計:資料庫正規化
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言