MySQL中可以自定义排序模式吗?

use*_*041 0 mysql

我有一个表,其值是假设的

c,d,b,a

我想排除除以外的值'a'.它应该始终位于底部.订单应该是

b,c,d,a.

jpw*_*jpw 5

您可以使用case语句来执行此操作:

select * from table1
order by case when val = 'a' then 1 else 0 end, val
Run Code Online (Sandbox Code Playgroud)

这将对"a"之前不是"a"的所有值进行排序,然后按值排序.

示例SQL小提琴

正如Zorn先生在评论中所指出的那样,以及Luke101在另一个答案中的指出,这句话可以简化为:

select * from table1
order by val = 'a', val
Run Code Online (Sandbox Code Playgroud)

前一个解决方案应该适用于所有符合ANSI标准的数据库,后者适用于MySQL,Postgresql和其他一些数据库(例如,不适用于MSSQL).