mysql order by if()或order by in()条件排序

转载自:https://blog.csdn.net/weixin_38626799/article/details/80107697

在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部。
通过的方法就是IN语句(也可以通过IF语句)

自己做了个测试,如下,这个是表的所有内容
这里写图片描述

使用ORDER BY配合if语句

需求1:将age为24的列置顶,其他的按照age的自然顺序排列:

这里写图片描述

我们可以看到age为24的列被强行拉到了最前边。
这里需要注意:

if(age=24,0,1),age;

对age进行排序的同时,给age附加一个隐藏属性,这个隐藏属性可以是0或者1。
就是在对age排序的时候,优先级是判断age是否为24,如果是,返回0,如果不是,返回1。
先进行age隐藏属性的排序,隐藏属性排完以后,再进行剩余age的自然排序。

也就是说,你可以把这个 if 语句,看成是一个独立的column。

需求2:如果将age为24的列放到最后并且其他的列按照age的自然顺序排列:

这里写图片描述

正如上面一段说的,你可以把if 语句看成是独立的column,所以你也可以为他添加排序条件ASC或者DESC,当然默认是ASC,可以不写。

使用ORDER BY配合IN语句

需求:将batchDate为’2018-06-27’和’2018-06-23’放到最后,其他的列按照batchDate的自然顺序排列

这里写图片描述

这里,batchDate in会判断,如果batchDate满足条件返回1,不满足返回0。
所以,满足条件的两行,因为返回值是1,进行ASC排序的时候,就被放置在了最后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值