我有一个包含以下各列的表:
id | 重新访问(布尔)| FL(十进制)| FR(十进制)| RL(十进制)| RR(十进制)| 日期
我需要编写一个SELECT语句,该语句将对多列进行ORDER BY,具体取决于“ revisit”字段的值。
到目前为止,我只对“ revisit”进行了正确排序,如果“ revisit” = 0,则按日期排序,但是当“ revisit” = 1时,同时按四列进行排序。
SELECT * FROM vehicle ORDER BY `revisit` DESC, CASE WHEN `revisit` = 1 THEN `FL` + `FR` + `RR` + `RL` END ASC, CASE WHEN `revisit` = 0 THEN `date` END ASC
相反,它似乎是按四列的总和排序(在给定加号的情况下这是有意义的),因此,我如何同时按这些列(而不是总和)来对这些列进行排序。
我希望这是有道理的,谢谢!
在当前查询中,按四列之和排序。您可以使用least获取最低值,因此order by子句如下所示:
least
SELECT * FROM vehicle ORDER BY `revisit` DESC, CASE WHEN `revisit` = 1 THEN LEAST(`FL`, `FR`, `RR`, `RL`) END ASC, CASE WHEN `revisit` = 0 THEN `date` END ASC
当然,这将仅按最低值排序。如果两行都共享相同的最小值,则第二低的值不会排序。要做到这一点要困难得多,而且我并没有真正从您的问题中得知您是否需要那个。