關(guān)于在sql中使用order by實現(xiàn)排序出錯問題
在sql中使用order by實現(xiàn)排序出錯
因為本人正在學(xué)習(xí)數(shù)據(jù)庫階段,所以我會把我遇到的問題和一些我已經(jīng)解決了的例子放上來,僅供參考~
1.一般情況下
我們在命令行里使用order by來進行排序。
但存在一個問題,就算我們進行了排序,還是會出現(xiàn)錯誤,就拿下面這個例子來說,
按照alexa欄進行升序排列,但排序過后卻變成了這個樣子,
噔噔噔?這個3是怎么回事,怎么不聽話,使用的語句沒有錯啊,實際上,此處的alexa是varchar類型的,在使用order by進行排序時,會自動按照字符串排序的方式,1開頭的排在前面,然后再排2開頭的,3,4,5······
2.要想按照數(shù)值排序
就得先將字符串類型改為數(shù)值類型,我百度過,都說的是將order by ASC改為order by convert(int ,alexa)或者order by cast(alexa as int),但實際上我試驗了,還是報錯,不知道為什么,
后來我考慮到數(shù)值類型除了int,還有其他的,我就試了一下decimal,decimal表示的是精度值,百度上說當(dāng)用 int類型會有溢出時,可以用 decimal 類型進行處理,把結(jié)果可以用 convert 或是 cast 進行轉(zhuǎn)換。
此時就可以了,結(jié)果如下圖顯示:
SQL ORDER BY自定義排序規(guī)則
默認SQL語句中的order by會根據(jù)指定字段的內(nèi)容按照默認規(guī)則排序
比如說我現(xiàn)在有這樣一個表:
id | level | name |
2 | 中 | 劉德華 |
3 | 低 | 張惠妹 |
1 | 高 | 陳冠希 |
可以使用下面的語句來自定義排序規(guī)則(按照高中低的順序)
SELECT * FROM stars ORDER BY ( CASE level WHEN '高' THEN 3 WHEN '中' THEN 2 ELSE 1 END ) ASC
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))
下面小編就為大家?guī)硪黄獪\談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Linux系統(tǒng)下mysqlcheck修復(fù)數(shù)據(jù)庫命令(詳解)
下面小編就為大家?guī)硪黄狶inux系統(tǒng)下mysqlcheck修復(fù)數(shù)據(jù)庫命令(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦2016-12-12MySQL BinLog如何恢復(fù)誤更新刪除數(shù)據(jù)
這篇文章主要介紹了MySQL BinLog如何恢復(fù)誤更新刪除數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06