我有一个包含以下列的表:
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
相反,似乎是按照四列的总数排序(这对于添加符号是有意义的),所以我如何同时将这些列作为单独的列进行排序,而不是求和。
我希望这是有道理的,谢谢!
答案 0 :(得分:2)
在当前查询中,您按四列的总和进行排序。您可以使用least
获取最低值,因此order by子句可能如下所示:
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
当然,这只会按最低值排序。如果两行都共享相同的最低值,则对第二低的值没有排序。要做到这一点要困难得多,而且我是否真的从你的问题中得到你是否需要它。