使用mysql命令大小写排序特定行

时间:2012-01-19 10:16:15

标签: mysql sorting case rows using

我有一个从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

有没有办法通过使用这样的查询来实现这一目标?

3 个答案:

答案 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

但这不是一个完美的解决方案