【问题标题】:SQL SELECT ORDER BY multiple columns depending on value of other columnSQL SELECT ORDER BY 多列取决于其他列的值
【发布时间】:2015-07-16 13:32:54
【问题描述】:

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

标识 |重访 (bool) | FL(十进制)| FR(十进制)| RL(十进制) | RR (十进制) |日期

我需要编写一个 SELECT 语句,该语句将根据“revisit”字段的值对多个列进行 ORDER BY。

  1. ORDER BY 'revisit' DESC - 此字段值为 1 的记录将排在第一位,0 将排在后面
  2. 如果 'revisit' = 1,则按 FL、FR、RL 和 RR 中存在的最低值排序。因此,如果记录 1 在这些字段中具有值 4.6、4.6、3.0、5.0,并且记录 2 具有值 4.0、3.1、3.9 和 2.8,则记录 2 将首先返回,因为它在这四列中具有最低值。李>
  3. 如果 'revisit' = 0,则按日期排序 - 最早的日期将排在第一位。

到目前为止,我仅对“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

相反,它似乎是按四列的总和排序(考虑到加法符号,这将是有意义的),那么我如何同时对这些列进行排序,作为单独的列,而不是总和。

我希望这是有道理的,谢谢!

【问题讨论】:

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

标签: mysql sql sql-order-by


【解决方案1】:

在您当前的查询中,您按四列的总和排序。您可以使用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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多