一尘不染

您可以在ORDER BY中添加if语句吗?

mysql

我正在努力实现以下目标:

我有一个ORDER BY语句,该语句可能会根据列A中存储的值而有所不同。

例如:

如果类型是成员,则按成员姓氏排序;如果类型是组,则按组名字排序

两者均以升序排列。

我对最终声明的最佳猜测是:

SELECT * 
  FROM table 
 WHERE STATUS = 'Active' 
 ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC

我知道这是错误的,但无法在其他地方找到信息。有任何想法吗?


阅读 766

收藏
2020-05-17

共1个答案

一尘不染

好了,您可以在MySQL中使用该IF 函数
(请注意,function因为还有一个不相关的IF语句,所以要重点说明)…:

ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC

然而,在这种情况下,它似乎是更好的选择(从灵活性的角度来看)将是CASE语句

ORDER BY 
    CASE `type` 
        WHEN 'Member' THEN LNAME 
        WHEN 'Group' THEN GROUPNAME
        ELSE 1 END 
    ASC

注意,从CASE到的整个块END将被视为单个“单位”。结果就是您要进行排序的原因(因此,为什么ASC在块之后而不是在块内部)…

2020-05-17