mysql 中 order by in 和order by if 的用法

mysql 中 order by in 和order by if 的用法

一、order by in

举例:不知道大家有没有做过SQL zoo的题目,里面有一题就是对这个知识点的考查
题目如下:

可以将表达式主题IN(“化学”,“物理”)用作值-它可以是0或1。 显示1984年获奖者和主题(按主题和获奖者名称排序);但最后列出化学和物理。

其实这个题目已经给提示了,直接运行初始代码可以看到
在这里插入图片描述
代码运行结果
subject in 符合里面的条件的话是1,否则是0.明白这个原理之后就可以来看看正确答案了

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN (‘Physics’,‘Chemistry’), subject , winner ;

在这里插入图片描述
如果subject的值在(‘Chemistry’,‘Physics’)里面,返回1,否则返回0,所以,满足条件的数据,因为返回值是1,进行asc排序的时候,就被放在最后,然后再进行后面的排序

二、order by if

直接放图吧,是对题目的第二种解法
在这里插入图片描述
If(subject=‘Chemistry’ or subject=‘Physics’,1,0) 中1,0的意思是,对 subject 附加一个隐藏属性,这个属性可以是0或者1;在排序的时候,判断subject是不是等于物理或化学,如果等于,则返回1;否则,返回0。order by 默认是升序,所以值为1的会排在后面。

想要实现排序放在最前面的话只要把“1,0”改成“0,1”即可;也可以在if 后面添加desc来改变放在最前或最后的位置(in 的方法同样适用)。

可以发现,if比较适合对一到两个条件的筛选,多了就会显得冗长繁琐,in 适合对多个条件的筛选,代码简洁。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值