mysql - SQL SELECT ORDER BY 多个列取决于其他列的值

标签 mysql sql sql-order-by

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

id |重新访问( 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,则按日期排序 - 最旧的日期将排在前面。

到目前为止,我单独正确排序了“重新访问”,如果“重新访问”= 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

相反,它似乎是按四列的总和排序(这在给定加法符号的情况下是有意义的),那么我如何同时按这些列作为单独的列而不是总和进行排序。

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

最佳答案

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

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

关于mysql - SQL SELECT ORDER BY 多个列取决于其他列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076307/

相关文章:

php - 交易情况的基本模式

PHP 检查 XML 中是否存在元素

sql - SELECT * 其中所有 integer[] 单元格都在一组值中

sql - 使用 MySql,我可以对列进行排序但最后有 0 吗?

mysql - 从 mysql 数据库中选择一些内容并按计数(其中)排序

python - 有没有办法加密存储在 Django 中的 MySQL 密码?

php - 在 Web 应用程序上下文中使用 mysql INTO OUTFILE

php - 在phpMyAdmin中创建关系数据库时出错

SQl 日期差异

mysql - 从 MySQL 表中选择,同时从另一个表中按 ID 排序