您可以使用IF() 函数对条件进行排序。 IF() 的文档指出:
IF(expr1,expr2,expr3)
如果 expr1 为 TRUE(expr1 0 且 expr1 NULL),则 IF() 返回
expr2;否则返回 expr3。 IF() 返回数字或字符串
值,取决于使用它的上下文。
因此您可以使用它对顶部的特定元素进行排序,如下所示:
SELECT *
FROM fruit
ORDER BY
IF(name = 'Peach', 0, 1),
IF(name = 'Apple', 0, 1),
IF(name = 'Apricot', 0, 1),
name DESC
这是一系列命令,第一个具有最高优先级。因此,如果name='Peach',该值将为 0,对于所有其他值,该值为 1。由于在默认的 ASC 顺序中,0 在 1 之前,这确保了“Peach”将位于列表的顶部。系列中的第二个排序指定如何为第一个排序打破平局。在这种情况下,除 'Peach' 之外的所有元素都与值 '1' 在第一个排序中并列。在这种情况下,“Apple”被推到并列榜首,实际上是总榜的第二位。等等...一直到最后的“名称 DESC”。
正如另一个答案指出的那样,CASE() 是一系列IF()s 的替代品:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]
[ELSE result] END
第一个版本返回 value=compare_value 的结果。这
第二个版本返回第一个条件的结果,即
真的。如果没有匹配的结果值,ELSE之后的结果是
返回,如果没有 ELSE 部分,则返回 NULL。