MySQL中一些鮮為人知的排序方式
前言
ORDER BY 字段名 升序/降序,相信進來的朋友都認識這個排序語句,但遇到一些特殊的排序,單單使用字段名就無法滿足需求了,下面給大家介紹幾個我遇到過的排序方法:
一、準備工作
為了更好演示與理解,先準備一張學生表,加入編號、姓名、成績?nèi)齻€字段,插入幾條數(shù)據(jù),如圖:

二、條件排序
需求一:成績從高到低進行排序
街邊賣菜的阿姨都能敲,直接使用 ORDER BY examScore DESC 輕松完成了(如下左圖)。
需求二:成績從高到低進行排序,并且沒錄入成績的排在最前面
客戶體驗最重要,為了方便二次錄入成績,提出這樣的需求純屬正常。要實現(xiàn)該排序,上面的語句是無法實現(xiàn)的,因此就需要用到條件排序,先判斷成績?yōu)榭召x個最大值,再進行排序,如 ORDER BY IF(examScore IS NULL,101,examScore) DESC 也能輕松實現(xiàn)(如下右圖)。
| 需求 | 需求一 | 需求二 |
|---|---|---|
| 語句 | ORDER BY examScore DESC | ORDER BY IF(examScore IS NULL,101,examScore) DESC |
| 效果 | ![]() |
![]() |
三、自定義排序
客戶如上帝,需求花里胡哨也屢見不鮮,就比如,要求張三李四排在最前面,其他學生按照成績從高到低進行排序。這種情況就需要使用自定義排序了,MySQL 自帶的 FIELD 函數(shù)(返回對應(yīng)字符串的索引)可幫您實現(xiàn)。
語句一:
ORDER BY FIELD(studentName,‘張三',‘李四') ASC, examScore DESC;
上面語句運行結(jié)果卻把張三李四排到最后了(如下左圖),順理成章的,要把張三李四編排到最前面就進行降序排序。
語句二:
ORDER BY FIELD(studentName,‘李四',‘張三') DESC, examScore DESC;
結(jié)果果然正中下懷(如下右圖)。
| 語句 | 語句一 | 語句二 |
|---|---|---|
| 效果 | ![]() |
![]() |
后來發(fā)現(xiàn) FIND_IN_SET 函數(shù)也能實現(xiàn),而且使用100萬條數(shù)據(jù)測試,F(xiàn)IND_IN_SET 性能更優(yōu)。
ORDER BY FIND_IN_SET(studentName,‘李四,張三') DESC, examScore DESC;
四、漢字拼音首字母排序
有些朋友就奇怪了,漢字排序直接使用普通的 ORDER BY 字段 ASC 輕松完事啦,為什么說鮮為人知呢。
其實,用戶創(chuàng)建表字段使用 GBK 字符集時,直接使用ORDER BY 字段 ASC 可以迎刃而解,有些用戶為了防止亂碼,使用了 utf8 字符集,簡單的排序語句就無能為力了(如下左圖),因此在排序時把字段轉(zhuǎn)換為 GBK 就OK了(如下右圖)。
| 語句 | ORDER BY studentName ASC | ORDER BY CONVERT(studentName USING GBK) ASC |
|---|---|---|
| 效果 | ![]() |
![]() |
總結(jié)
到此這篇關(guān)于MySQL中一些鮮為人知的排序方式的文章就介紹到這了,更多相關(guān)MySQL排序方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
阿里云服務(wù)器手動實現(xiàn)mysql雙機熱備的兩種方式
阿里云服務(wù)器由于不支持keepalive虛擬ip,導致無法通過keepalive來實現(xiàn)mysql的雙機熱備。我們這里要實現(xiàn)阿里云的雙機熱備有兩種方式。感興趣的朋友跟隨小編一起看看吧2019-10-10
mysql 一次向表中插入多條數(shù)據(jù)實例講解
這篇文章主要介紹了mysql 一次向表中插入多條數(shù)據(jù)實例講解的相關(guān)資料,需要的朋友可以參考下2016-10-10
MySQL啟動報錯:Starting MySQL.. ERROR! The se
這篇文章給大家介紹了MySQL啟動報錯:Starting MySQL.. ERROR! The server quit without updating PID file的問題分析和解決辦法,文中給出了詳細的原因分析,需要的朋友可以參考下2023-12-12
MySQL導入.CSV數(shù)據(jù)中文亂碼的解決方式
當將xls或xlsx文件轉(zhuǎn)換為CSV并導入數(shù)據(jù)庫時,可能出現(xiàn)亂碼,原因是編碼格式不是UTF-8,解決方法是使用Notepad或記事本打開CSV文件,所以本文給大家介紹了MySQL導入.CSV數(shù)據(jù)中文亂碼的解決方式,需要的朋友可以參考下2024-08-08
MySQL深分頁,limit 100000,10優(yōu)化方式
MySQL中深分頁查詢因需掃描大量數(shù)據(jù)行導致效率低下,優(yōu)化方法包括子查詢優(yōu)化、延遲關(guān)聯(lián)、標簽記錄法和使用between...and...等,通過減少回表次數(shù)和范圍掃描提升查詢性能,覆蓋索引幫助減少搜索次數(shù),提升性能2024-10-10







