可以。。。我想根据他们的条件订购三列。
第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;
非常感谢您的帮助。如果需要进一步解释,请告诉我。
2条答案
按热度按时间nom7f22z1#
我想你得和我一起工作
ORDER BY CASE
: https://dev.mysql.com/doc/refman/8.0/en/case.html我不确定我是否理解这个案子,但我认为这很接近:
这是一把小提琴
sqserrrh2#
我想你想要:
这使行与
onlinecheck = 0
第一。然后,与drive_use
以上90
. 领带是按降序排列的last_reboot
.