假设有一个用户信息表。有一个字段是学历。1=高中以下,2=高中,3=专科,4=本科,5=硕士,6=博士。有一个需求是本科显示在前面,然后按学历高低显示。

1.执行下面的sql

CREATE TABLE `user_info` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`user_name` varchar(255) DEFAULT NULL COMMENT '姓名',`edu_degree` int(1) NOT NULL COMMENT '学历(1=高中以下,2=高中,3=专科,4=本科,5=硕士,6=博士)',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息';INSERT INTO `user_info`(`id`, `user_name`, `edu_degree`)values
(1, '李一恒', 1),(2, '张一鸣', 1),(3, '赵一楠', 1),(4, '钱和一', 1),(5, '孙依一', 1),
(6, '周二凡', 2),(7, '吴二平', 2),(8, '郑二玮', 2),(9, '王二语', 2),(10, '冯二乐', 2),
(11, '陈三皓', 3),(12, '褚三和', 3),(13, '卫三睿', 3),(14, '蒋三晗', 3),(15, '沈三哲', 3),
(16, '韩四圆', 4),(17, '杨四秋', 4),(18, '朱四宏', 4),(19, '秦四琪', 4),(20, '尤四霖', 4),
(21, '许五菱', 5),(22, '何五森', 5),(23, '吕五可', 5),(24, '施五明', 5),(25, '张五泓', 5),
(26, '孔六琛', 6),(27, '曹六茹', 6),(28, '严六悦', 6),(29, '华六怡', 6),(30, '金六媛', 6);

2.正常查询只能实现1-6,或者6-1的学历排序。

这个时候。我们就能用得上order by里面加if函数了。可以让学历为4的显示在前面。然后其他数据正常排序。

select * from user_info
order by if(edu_degree=4,0,1),edu_degree desc;

总结:order by中是可以用函数的。常用的有if(),ifnull()

当然,上述的需求还有以下解决方法。
1.置顶排序

select * from user_info
order by edu_degree=4 desc ,edu_degree desc;

2.case when 去弄一个结果集字段用于排序。且适用于更混乱的排序。

select *,
case  when edu_degree=4 then7
else  edu_degree
end order_degree
from user_info
order by order_degree desc;
SELECT * FROM user_info
ORDER BY
CASE WHEN edu_degree = 4 THEN0ELSE 1END,
edu_degree DESC;

常见问题:
1.mysql中if函数的作用
2. order by if(edu_degree=4,0,1),edu_degree desc 看不懂。
if(edu_degree=4,0,1) 是一级排序。会将 edu_degree=4结果当成0,其他的就是1,那么edu_degree=4的就在最前面了。因为edu_degree=1,2,3,5,6的一级排序级别一样,就走edu_degree desc二级排序。

文章更新待续。。。。。

mysql中使用order by 排序时使用if()函数应用场景。相关推荐

  1. mysql中条件查询加排序和索引的关系

    跟一个朋友,不错公司的主管交流时,对于mysql中条件查询和排序时 与索引的关系 mysql> explain select * from article where title='希望光伏企业 ...

  2. mysql中的order by

    一.order by的原理 1.利用索引的有序性获取有序数据 当查询语句的 order BY 条件和查询的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 ran ...

  3. mysql按域排序_如何在MySQL中对域名进行排序?

    要对域名进行排序,请使用ORDER BY SUBSTRING_INDEX().让我们首先创建一个表-mysql> create table DemoTable670(DomainName tex ...

  4. mysql中使用join exists in时该注意的问题

    2019独角兽企业重金招聘Python工程师标准>>> 这是个老生常谈的问题,平时在简单使用过程中,都能得到想要的结果,但是对于各自的性能,以及适用场景,我们该注意什么?假如现在有表 ...

  5. MySQL中如何约束和排序数据

    约束和排序数据 一.比较运算符 例 1.查询 employees 表,员工薪水大于等于 15000 的员工的姓名与薪水. Select * from employees where salary &g ...

  6. mysql 中如何增加查询排序性能

    说起优化排序的工作,本人菜鸟一枚,如果百度找到的我想学习请转道,因为我也不能保证一定准确. 如果发现我写的不好请留言,留下微信,我给你发红包 这块的学习领域在高性能mysql中175页使用索引排序,查 ...

  7. mysql中使用order by 速度很慢解决办法

    背景:                 今天在优化项目中的一条查询语句,耗时5秒左右,大概6张表关联查询,然后结果进行排序之后再分页查询20条数据. 代码: SELECT* FROMt_card_re ...

  8. mysql 变量被引号括住_【已解决】mysql中操作表的字段名时是否一定要用反引号括起来...

    折腾: 期间,看到别人: 实现Pyspider爬虫结果的自定义ResultWorker – 简书    @staticmethod def escape(string): return '`%s`' ...

  9. MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用

    在MySQL中可以使用IF().IFNULL().NULLIF().ISNULL()函数进行流程的控制. 1.IF()函数的使用 IF(expr1,expr2,expr3),如果expr1的值为tru ...

  10. Mysql 查询主键未指定排序时的默认排序问题

    正文 跑批量任务需要分批按顺序把主键取出来,语句如下: SELECT id FROM foo.bar LIMIT 10 OFFSET 0 +-----+ | id | +-----+ | 109 | ...

最新文章

  1. 统计学习导论:基于R应用——第二章习题
  2. Matlab画三维曲线入门
  3. Hadoop hdfs 使用流来上传文件代码示例
  4. 区位码\机器码\内码关系
  5. 2015北京网络赛 G题 Boxes bfs
  6. 重磅!华为发布2025年十大趋势
  7. 数据库中间件mycat简单入门
  8. spring boot 使用devtools热部署
  9. java cancel_java – Future.cancel(boolean)方法的实用程序
  10. 思科DHCP不同网段通信
  11. leetcode·单调栈
  12. Revit 2021 族样板下载
  13. 常用键盘对应keyascii码
  14. Selenium2学习笔记——自动化环境搭建
  15. ami编码设计流程图_AMI码型变换
  16. dw html图片居中,dw怎么把整个表格居中 怎么在dw里面把整个网页居中?
  17. IntelliJ IDEA 在方法大括号中{}点击回车多出一个},如何取消
  18. Service Mesh中的通用数据平面API设计
  19. proxmox PVE 安装 黑群晖
  20. html 气泡上升效果,css气泡效果

热门文章

  1. 一文带你深入了解大数据服务
  2. SuperMap iServer 重置密码
  3. 科学-建筑学:建筑学百科
  4. “自刎而死”的李贽之 “童心说”
  5. pythonexcel源码_Python对Excel操作详解_Python教程
  6. 2020N1叉车司机模拟考试及N1叉车司机复审模拟考试
  7. Multi-Object Trackers
  8. html excel零不显示,Excel中把0显示为空白的三种解决方法
  9. Java面向对象编程练习:定义一个交通工具的基类,包含成员属性商标和颜色,成员方法run和showInfo显示信息。编写小汽车类和卡车类来继承交通工具类,添加相应的方法显示各自的信息
  10. 新浪微博登陆页面html代码,仿新浪微博登陆邮箱提示效果的js代码