参考链接指路: https://blog.csdn.net/bestallen/article/details/53726192.
ORDER BY配合IN语句
14.The expression subject IN (‘Chemistry’,‘Physics’) can be used as a value - it will be 0 or 1.
Show the 1984 winners and subject ordered by subject and winner name; but list Chemistry and Physics last.
select winner,subject
from nobel
Where yr = 1984
Order by subject in ('Chemistry','Physics'),subject,winner;
可以这样理解第4句:如果subject是chemistry或者physics,则返回为1,否则返回为0,按照升序排列,那么chemistry和physics返回结果为1,排在最后。
ORDER BY配合IF语句
比如我想将species为snake的行数,放置到查询结果开头,我可以这样查询
SELECT * FROM pet ORDER BY if (species=‘snake’,0,1),species;
结果如下
这是怎么做到的呢?
if (species=‘snake’,0,1),species;
这句话的意思是,我对species进行排序的同时,给species附加一个隐藏属性,这个隐藏属性,可以是0或者1
什么意思呢?就是在对species排序的时候,优先级是判断species是否为snake,如果是,返回0,如果不是,返回1.(if语句逻辑,与order by in 不同,后者符合返回1)
随后,先进行species隐藏属性的排序,隐藏属性排完以后,再进行剩余species的排序
也就是说,你可以把这个 if 语句,看成是一个独立的column,所以你也可以为他添加排序条件ASC或者DESC,当然默认是ASC,可以不写。
那如果我们想把snake的这一行放在查询结果尾部呢?
那你可以这样写
SELECT * FROM pet ORDER BY if(species=‘snake’,0,1) DESC,species;
这样,查询就等于第一步是查询隐藏属性0,1,然后进行DESC排序,因为species=snake的返回值是0,所以进行倒序排列时,就被排在了最后