我有一个从1,2,3增加id的表......依此类推。我想要的只是根据除前两行之外的字段'id'按降序对数据进行排序。我尝试使用以下查询: -
SELECT * FROM categories ORDER BY CASE WHEN id<3 THEN 0 ELSE id END DESC
它给我的结果如
id name
5 Meal
4 Apparel
3 Electronics
1 Sports
2 Lifestyle
但输出应该是
id name
1 Sports
2 Lifestyle
5 Meal
4 Apparel
3 Electronics
有没有办法通过使用这样的查询来实现这一目标?
答案 0 :(得分:2)
将其更改为:
CASE WHEN id<3 THEN id ELSE ~id END
而不是使用IF
:
IF(id<3, id, ~id)
答案 1 :(得分:2)
试试这个:
SELECT *
FROM categories
ORDER BY CASE WHEN id < 3 THEN 10000 - id ELSE id END DESC;
-- ----------------------------^
-- use a very large number
更好的解决方案,不需要硬编码10000
:
SELECT *
FROM categories
ORDER BY CASE WHEN id < 3 THEN id ELSE 3 END, id DESC
-- ---------------------^ ^
-- ------------------------------------|
-- these numbers must be same
答案 2 :(得分:1)
那是因为你按降序ID排序,所以订单是5-4-3-0-0。你可以尝试:
SELECT * FROM categories ORDER BY CASE WHEN id<3 THEN 9999 ELSE id END DESC
但这不是一个完美的解决方案