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

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

一、order by in

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

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

其实这个题目已经给提示了,直接运行初始代码可以看到
mysql 中 order by in 和order by if 的用法
mysql 中 order by in 和order by if 的用法
subject in 符合里面的条件的话是1,否则是0.明白这个原理之后就可以来看看正确答案了

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

mysql 中 order by in 和order by if 的用法
如果subject的值在(‘Chemistry’,‘Physics’)里面,返回1,否则返回0,所以,满足条件的数据,因为返回值是1,进行asc排序的时候,就被放在最后,然后再进行后面的排序

二、order by if

直接放图吧,是对题目的第二种解法
mysql 中 order by in 和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 适合对多个条件的筛选,代码简洁。