關(guān)于在sql中使用order by實現(xiàn)排序出錯問題
在sql中使用order by實現(xiàn)排序出錯
因為本人正在學習數(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表示的是精度值,百度上說當用 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)文章
MySQL中幾種數(shù)據(jù)統(tǒng)計查詢的基本使用教程
這篇文章主要介紹了幾種MySQL中數(shù)據(jù)統(tǒng)計查詢的基本使用教程,包括平均數(shù)和最大最小值等的統(tǒng)計結(jié)果查詢方法,是需要的朋友可以參考下2015-12-12
MySQL性能監(jiān)控軟件Nagios的安裝及配置教程
這篇文章主要介紹了MySQL性能監(jiān)控軟件Nagios的安裝及配置教程,這里以CentOS操作系統(tǒng)為環(huán)境進行演示,需要的朋友可以參考下2015-12-12
Trae MySQL MCP 連接失敗(Fail to start)的
本文詳細介紹了使用Trae工具遠程訪問內(nèi)網(wǎng)MySQL數(shù)據(jù)庫時遇到的啟動和認證兼容問題,并通過本地命令映射和環(huán)境變量注入的方式成功解決,具有一定的參考價值,感興趣的可以了解一下2026-01-01
MySQL生成連續(xù)的數(shù)字/字符/時間序列的方法
有時候為了生成測試數(shù)據(jù),或者填充查詢結(jié)果中的數(shù)據(jù)間隔,需要使用到一個連續(xù)的數(shù)據(jù)序列值,所以,今天我們就來介紹一下如何在 MySQL 中生成連續(xù)的數(shù)字、字符以及時間序列值,需要的朋友可以參考下2024-04-04

