MySQL排序秘籍:如何搞定排序问题
mysql如何排序

首页 2025-09-02 15:52:49

话说那日,本咸鱼刚把早朝(早会)熬完,正打算回养心殿摸鱼,就听见御前太监小桂子一路小跑:“皇上,不好了!文武百官打起来了!”
我一拍龙椅:“反了?为了几两碎银至于吗!”
小桂子喘得跟破风箱似的:“不是银子,是排序!吏部要把‘状元’排第一,户部偏说‘榜眼’更富,礼部又跳出来说按姓氏笔画,结果三方人马把金銮殿吵成了菜市场。”
我扶额,心想:这不就是MySQL里ORDER BY没写明白嘛!于是大手一挥:“宣——SQL大学士觐见!”
SQL大学士迈着四方步进来,先甩了甩袖子,清了清嗓子:“诸位莫慌,待本官上表一道SQL奏折。”
他掏出小本本,唰唰写下:
SELECT 姓名, 功名, 俸禄 FROM 科举榜 ORDER BY 功名 DESC, 俸禄 DESC;
“诸位请看,功名降序,俸禄再降序,状元自然在前,榜眼随后。若有人不服,再加第三排序键——姓氏笔画,敢有不从?”
礼部尚书跳出来:“那要是有人并列第一呢?”
大学士微微一笑:“那就 LIMIT 3,前三名上殿领赏,其余回家吃自己。”
百官瞬间安静,齐呼:“皇上圣明!”
我暗笑:这群家伙,平时批奏折慢得跟乌龟,抢排名倒是一个比一个快。
正得意间,小桂子又来报:“皇上,新科进士里有人姓‘丌’,笔画只有两画,排最前,他不干了,说显得自己像走后门。”
我翻白眼:MySQL里还有ORDER BY CONVERT(姓名 USING gbk) COLLATE gbk_chinese_ci这种骚操作,直接按拼音排,笔画妖怪一边凉快去!
大学士会意,立刻改写:
SELECT 姓名, 功名 FROM 科举榜 ORDER BY CONVERT(姓名 USING gbk) COLLATE gbk_chinese_ci ASC;
丌进士看完,满意点头:“这回我像凭实力考上的了!”
我长叹:当皇帝真累,不但要懂制衡,还得懂排序。

【教程番外篇:MySQL排序的十八般武艺】
  1. 基本语法
    ORDER BY 列名 【ASC|DESC】
    例:SELECT * FROM 表 ORDER BY 成绩 DESC;
  2. 多列排序
    先按主要列排,再按次要列排:
    ORDER BY 成绩 DESC, 年龄 ASC;
  3. 自定义顺序
    用FIELD函数:
    ORDER BY FIELD(职称,'院士','教授','副教授','讲师');
  4. 中文排序
    · 按拼音:ORDER BY CONVERT(姓名 USING gbk) COLLATE gbk_chinese_ci ASC;
    · 按笔画:ORDER BY CONVERT(姓名 USING utf8) COLLATE utf8_unicode_ci ASC;
  5. NULL值处理
    · MySQL8.0+:ORDER BY 成绩 IS NULL, 成绩 DESC; 把NULL放最后。
    · 旧版:ORDER BY IF(成绩 IS NULL,1,0), 成绩 DESC;
  6. 随机排序
    ORDER BY RAND(); 适合抽奖,记得加LIMIT,不然全表变蜗牛。
  7. 表达式排序
    按计算结果排:ORDER BY (语文+数学+英语) DESC;
  8. 性能小贴士
    · 给排序列加索引,别让皇帝等奏折。
    · 大分页用“延迟关联”:先SELECT主键LIMIT,再JOIN原表。
至此,排序秘籍传授完毕,诸位爱卿若再争吵,拖出去——加索引!
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道