需求 | 需求一 | 需求二 |
---|---|---|
語句 | ORDER BY examScore DESC | ORDER BY IF(examScore IS NULL,101,examScore) DESC |
效果 | ![]() |
![]() |
客戶如上帝,需求花里胡哨也屢見不鮮,就比如,要求張三李四排在最前面,其他學生按照成績從高到低進行排序。這種情況就需要使用自定義排序了,MySQL 自帶的 FIELD 函數(返回對應字符串的索引)可幫您實現。
語句一:
ORDER BY FIELD(studentName,‘張三',‘李四') ASC, examScore DESC;
上面語句運行結果卻把張三李四排到最后了(如下左圖),順理成章的,要把張三李四編排到最前面就進行降序排序。
語句二:
ORDER BY FIELD(studentName,‘李四',‘張三') DESC, examScore DESC;
結果果然正中下懷(如下右圖)。
語句 | 語句一 | 語句二 |
---|---|---|
效果 | ![]() |
![]() |
后來發現 FIND_IN_SET 函數也能實現,而且使用100萬條數據測試,FIND_IN_SET 性能更優。
ORDER BY FIND_IN_SET(studentName,‘李四,張三') DESC, examScore DESC;
有些朋友就奇怪了,漢字排序直接使用普通的 ORDER BY 字段 ASC
輕松完事啦,為什么說鮮為人知呢。
其實,用戶創建表字段使用 GBK 字符集時,直接使用ORDER BY 字段 ASC
可以迎刃而解,有些用戶為了防止亂碼,使用了 utf8 字符集,簡單的排序語句就無能為力了(如下左圖),因此在排序時把字段轉換為 GBK 就OK了(如下右圖)。
語句 | ORDER BY studentName ASC | ORDER BY CONVERT(studentName USING GBK) ASC |
---|---|---|
效果 | ![]() |
![]() |
到此這篇關于MySQL中一些鮮為人知的排序方式的文章就介紹到這了,更多相關MySQL排序方式內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!