Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL根据其他列的值按多列选择顺序_Mysql_Sql_Sql Order By - Fatal编程技术网

Mysql SQL根据其他列的值按多列选择顺序

Mysql SQL根据其他列的值按多列选择顺序,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一个包含以下列的表: id |回访(bool)| FL(十进制)| FR(十进制)| RL(十进制)| RR(十进制)|日期 我需要编写一个SELECT语句,根据“重访”字段的值对多个列进行排序 ORDER BY“REVICTION”DESC-此字段值为1的记录将位于第一位,值为0的记录位于第二位 如果“重新访问”=1,则按FL、FR、RL和RR中存在的最低值排序。因此,如果记录1在这些字段中的值为4.6、4.6、3.0、5.0,而记录2的值为4.0、3.1、3.9和2.8,则记录2将首先返

我有一个包含以下列的表:

id |回访(bool)| FL(十进制)| FR(十进制)| RL(十进制)| RR(十进制)|日期

我需要编写一个SELECT语句,根据“重访”字段的值对多个列进行排序

  • ORDER BY“REVICTION”DESC-此字段值为1的记录将位于第一位,值为0的记录位于第二位
  • 如果“重新访问”=1,则按FL、FR、RL和RR中存在的最低值排序。因此,如果记录1在这些字段中的值为4.6、4.6、3.0、5.0,而记录2的值为4.0、3.1、3.9和2.8,则记录2将首先返回,因为它在这四列中保留了最低的值
  • 如果“重新访问”=0,则按日期排序-最早日期将排在第一位
  • 到目前为止,我的“重访”单独排序正确,如果“重访”=0,则按日期排序,但如果“重访”=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
    
    相反,它似乎是按四列的总数排序的(这在给定加法符号时是有意义的),所以我如何同时按这些列排序,作为单个列,而不是总和


    我希望这是有意义的,谢谢

    在当前查询中,按四列之和排序。您可以使用获取最低值,因此您的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
    

    当然,这只能按最低值排序。如果两行都共享相同的最低值,则对第二个最低值不进行排序。要做到这一点要困难得多,我并没有真正从你的问题中了解到你是否需要它。

    你需要使用多个案例。如果我这样做,我声明案例的顺序会影响结果的顺序吗?这四列中的任何一列都可以保存该行中的最低值,我需要将该值与另一行中的最低值进行排序,该行可能位于这四列中的另一列中。