首頁 >資料庫 >mysql教程 >MySQL少有人知的排序方式

MySQL少有人知的排序方式

coldplay.xixi
coldplay.xixi轉載
2021-02-09 10:01:202694瀏覽

<img src="https://img.php.cn/upload/article/202102/09/2021020910000799574.jpg" alt="MySQL少有人知的排序方式" >

#免費學習推薦:mysql影片教學

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

一、準備工作

#為了更好示範與理解,先準備一張學生表,加入編號、姓名、成績三個字段,插入幾條數據,如圖:
MySQL少有人知的排序方式

二、條件排序

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

街上賣菜的阿姨都能敲,直接使用ORDER BY examScore DESC 輕鬆完成了(如下左圖)。

需求二:成績由高到低排序,並且沒錄入成績的排在最前面

客戶體驗最重要,為了方便二次錄入成績,提出這樣的需求純屬正常。要實現該排序,上面的語句是無法實現的,因此就需要用到條件排序,先判斷成績為空賦個最大值,再進行排序,如ORDER BY IF(examScore IS NULL,101,examScore ) DESC 也能輕鬆實現(如下右圖)。

效果
需求 需求一 需求二
語句 ORDER BY examScore DESC ORDER BY IF(examScore IS NULL,101,examScore) DESC



MySQL少有人知的排序方式 MySQL少有人知的排序方式



##三、自訂排序客戶如上帝,需求花俏也屢見不鮮,就比如,要求張三李四排在最前面,其他學生按照成績從高到低進行排序。這種情況就需要使用自訂排序了,MySQL 自帶的 FIELD 函數(傳回對應字串的索引)可幫助您實現。 ORDER BY FIELD(studentName,'張三','李四') ASC, examScore DESC;#上面語句運行結果卻把張三李四排到最後了(如下左圖),順理成章的,要把張三李四編排到最前面就進行降序排序。 語句二:語句
語句一:
ORDER BY FIELD(studentName,'李四','張三') DESC, examScore DESC; MySQL少有人知的排序方式#結果果然正中下懷(如下右圖)。 MySQL少有人知的排序方式
語句一

#語句二

效果


#後來發現FIND_IN_SET 函數也能實現,而且使用100萬個資料測試, FIND_IN_SET 性能更優。 ORDER BY FIND_IN_SET(studentName,'李四,張三') DESC, examScore DESC;四、漢字拼音首字母排序有些朋友就奇怪了,漢字排序直接使用普通的ORDER BY 字段ASC 其實,使用者建立表格欄位使用GBK 字元集時,直接使用語句
輕鬆完事啦,為什麼說鮮為人知呢。 ORDER BY 欄位ASCMySQL少有人知的排序方式 可以迎刃而解,有些使用者為了防止亂碼,使用了utf8 字元集,簡單的排序語句就無能為力了(如下左圖),因此在排序時把欄位轉換為GBK 就OK了(如下右圖)。 MySQL少有人知的排序方式
ORDER BY studentName ASC

ORDER BY CONVERT(studentName USING GBK) ASC

  • #效果

#五、猜你喜歡

MySQL遠端連線錯誤1130解決方法######MySQL設定主從同步備份######使用篩選器防止SQL注入####### #########相關免費學習推薦:#########mysql資料庫##########(影片)#########

以上是MySQL少有人知的排序方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除