指定要在有序结果中显示的最后一个值

时间:2015-02-12 17:02:43

标签: mysql sql

有没有办法指定最后一个值来订购Mysql结果。例如,如果我有下表

id    |   Colour
 1    |   Blue
 2    |   Red
 3    |   Yellow
 4    |   Green

我的查询结果是否可以显示'红色'最后

SELECT * 
FROM colours 
ORDER By colours ASC [but show Red last] 

4 个答案:

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