MySQL解释如何:ORDER BY CASE状态1,然后1 ELSE -1 END DESC

时间:2016-03-21 21:38:52

标签: mysql sql

我正在处理现有项目并找到此SQL语句。在查看MySQL documentation之后,我仍然对语法以及MySQL如何解释它感到困惑。

我有一个名为status的列,可以是0(非活动),1(活动),2(已完成),3(测试)。

ORDER BY CASE status WHEN 1 THEN 1 ELSE -1 END DESC, id ASC

让我感到困惑的是THEN 1 ELSE -1。在documentation中,它提到您在statement_list之后放置THEN。我希望看到这样的事情:

ORDER BY CASE status WHEN 1 THEN status ELSE -1 (or some other value that will be ignored) END DESC, id ASC

mysql如何解释THEN 1 ELSE -1?我想我很好奇这句话如何回归正确的结果。它基本上是这样做的:如果status = 1,则ORDER BY status DESC忽略order by语句。

2 个答案:

答案 0 :(得分:1)

  

ORDER BY CASE状态当1那么1 ELSE -1 END DESC,id ASC

这意味着它有效地按(1或-1 DESC,id ASC)排序。

根据状态值,它将1或-1作为第一个表达式来排序依次和" id ASC"是打破平局。 status = 1的行将在结果中排​​在第一位(按id按升序排序),之后将返回status的其他值的行(不再指定其顺序)

答案 1 :(得分:0)

由于DESC子句,它将按活动状态优先(1)排序,然后在此之后返回其他所有内容。分配给-1的任何东西都可以随机排序。