溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQ中排序方式有哪些

發(fā)布時間:2021-02-20 16:02:54 來源:億速云 閱讀:150 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)MySQ中排序方式有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

ORDER BY 字段名 升序/降序,相信進來的朋友都認識這個排序語句,但遇到一些特殊的排序,單單使用字段名就無法滿足需求了,下面給大家介紹幾個我遇到過的排序方法:

一、準備工作

為了更好演示與理解,先準備一張學(xué)生表,加入編號、姓名、成績?nèi)齻€字段,插入幾條數(shù)據(jù),如圖:
MySQ中排序方式有哪些

二、條件排序

需求一:成績從高到低進行排序

街邊賣菜的阿姨都能敲,直接使用 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 DESCORDER BY IF(examScore IS NULL,101,examScore) DESC



效果MySQ中排序方式有哪些MySQ中排序方式有哪些

三、自定義排序

客戶如上帝,需求花里胡哨也屢見不鮮,就比如,要求張三李四排在最前面,其他學(xué)生按照成績從高到低進行排序。這種情況就需要使用自定義排序了,MySQL 自帶的 FIELD 函數(shù)(返回對應(yīng)字符串的索引)可幫您實現(xiàn)。

語句一:
ORDER BY FIELD(studentName,‘張三’,‘李四’) ASC, examScore DESC;

上面語句運行結(jié)果卻把張三李四排到最后了(如下左圖),順理成章的,要把張三李四編排到最前面就進行降序排序。

語句二:
ORDER BY FIELD(studentName,‘李四’,‘張三’) DESC, examScore DESC;

結(jié)果果然正中下懷(如下右圖)。

語句語句一語句二
效果MySQ中排序方式有哪些MySQ中排序方式有哪些

后來發(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 ASCORDER BY CONVERT(studentName USING GBK) ASC
效果MySQ中排序方式有哪些MySQ中排序方式有哪些

五、猜你喜歡

  • MySQL遠程連接報錯1130解決方法

  • MySQL配置主從同步備份

  • 使用過濾器防止SQL注入

感謝各位的閱讀!關(guān)于“MySQ中排序方式有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI