有没有办法指定最后一个值来订购Mysql结果。例如,如果我有下表
id | Colour
1 | Blue
2 | Red
3 | Yellow
4 | Green
我的查询结果是否可以显示'红色'最后
SELECT *
FROM colours
ORDER By colours ASC [but show Red last]
答案 0 :(得分:1)
您需要在ORDER BY
中使用一些条件逻辑。这将按照您想要的特定顺序对数据进行排序,Red
始终是最后一个:
SELECT id, colour
FROM colours
ORDER BY
CASE
WHEN colour <> 'Red'
THEN 1 ELSE 2 END, colour;
见SQL Fiddle with Demo。这使用CASE
表达式为每个用于排序的行分配值。 Red
被赋予更高的值,因此它将显示在列表的末尾。
这也可以先测试Color等于Red
:
SELECT id, colour
FROM colours
ORDER BY
CASE
WHEN colour = 'Red'
THEN 2 ELSE 1 END, colour;
见Demo。两个版本都会返回:
| ID | COLOUR |
|----|--------|
| 1 | Blue |
| 4 | Green |
| 5 | Orange |
| 6 | Teal |
| 3 | Yellow |
| 2 | Red |
答案 1 :(得分:1)
在某些情况下,您可能需要使用单列排序来执行此操作。并且一些查询/平台要求排序列成为输出的一部分。
SELECT
id, colour,
case when colour = 'Red' then 'zzzzz' else '' end + colour as colour_sort
FROM colours
ORDER By colour_sort
答案 2 :(得分:0)
一种解决方法,但会得到你想要的东西
(SELECT * FROM colours WHERE Colour != 'Red' ORDER By Colour ASC)
UNION SELECT * FROM colours WHERE Colour = 'Red'
答案 3 :(得分:-1)
您可以使用案例陈述来映射您的颜色:
select id, colour,
case
when colour = 'Red' then 1
when colour = 'blue' then 2
when colour = 'Yellow' then 3
when colour = 'Green' then 4
end as SortOrder
from colours
ORDER By SortOrder