我有一个表,id从1、2、3…依此递增。我想要的只是根据字段"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
有什么方法可以通过使用这样的查询来实现这一点吗?
试试这个:
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
将其更改为:
CASE WHEN id<3 THEN id ELSE ~id END
使用IF
:代替case
IF(id<3, id, ~id)
这是因为您是按ID降序排序的,所以顺序是5-4-3-0-0。你可以试试:
SELECT * FROM categories ORDER BY CASE WHEN id<3 THEN 9999 ELSE id END DESC
但这不是一个完美的解决方案