我有一个mysql表,我希望它的一部分排序不同。例如,我需要以下结果集:
+----+
| id |
+----+
| 1 | #ascending
| 2 |
| 3 |
| 4 |
| 8 | #descending
| 7 |
| 6 |
| 5 |
+----+
我基本上想做一些事情,比如:
ORDER BY
WHEN id <= 4 THEN
id ASC
ELSE
id DESC
END;
这当然是胡说八道。有没有感官上的对等物?我试过用 UNION
,但忽略子查询顺序。
2条答案
按热度按时间q7solyqu1#
您可以使用两阶段订购流程;第一部分按是否
id
小于或等于4,且二阶id
(用于id <= 4
)或者-id
(用于id > 4
)因此,大于4的值按降序排序:输出:
sqlfiddle演示
fafcakar2#
有人发布了这个答案,但删除了它;我重新发布是因为它仍然是一个有效的答案。
而不是把订单变成
ELSE
子句中,可以将一个规则限制为一个子集,下一个规则将应用于其余规则:sqlfiddle演示