mysql特定的带条件的顺序

bfnvny8b  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(355)

可以。。。我想根据他们的条件订购三列。
第1列(int)=上次重新启动
第2列(bool)=联机检查
第3列(int)=驱动器使用
我希望“上次\u重新启动”是默认值并按降序排列。如果“onlinecheck”=0,我希望它位于查询的顶部,否则按“last\u reboot”说明排序。最后,如果“drive\u use”大于90,我希望它的顺序高于“last\u reboot”,低于“onlinecheck”=0,否则按“last\u reboot”说明排序。
目标示例:

| last_reboot | onlinecheck | drive_use |
----------------------------------------------
|      15     |      0      |     80    |
|      90     |      1      |     91    |
|     320     |      1      |     80    |
|      45     |      1      |     50    | 
|      20     |      1      |     89    |

通过使用order by字段,我可以实现其中的一半,但一旦我引入“drive\u use”,我就无法让它正常工作。”如果驱动器“use”不为空,则总是在“last\u reboot”之前排序。

SELECT * FROM <table> ORDER BY FIELD (onlinecheck, 0) DESC, (drive_per > 90), last_reboot DESC;

非常感谢您的帮助。如果需要进一步解释,请告诉我。

nom7f22z

nom7f22z1#

我想你得和我一起工作 ORDER BY CASE : https://dev.mysql.com/doc/refman/8.0/en/case.html
我不确定我是否理解这个案子,但我认为这很接近:

ORDER BY (CASE
    WHEN onlinecheck = 0 THEN 2 
    WHEN (drive_use > 90) THEN 1 
    ELSE 0
END) DESC,
last_reboot DESC

这是一把小提琴

sqserrrh

sqserrrh2#

我想你想要:

order by 
    onlinecheck,
    drive_use > 90 desc,
    last_reboot desc

这使行与 onlinecheck = 0 第一。然后,与 drive_use 以上 90 . 领带是按降序排列的 last_reboot .

相关问题