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

假设有一个用户信息表。有一个字段是学历。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 then
  7
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 THEN
		0
	ELSE 
	    1
	END,
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二级排序。

文章更新待续。。。。。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值