Mysql 指定要在排序结果中最后显示的值

Mysql 指定要在排序结果中最后显示的值,mysql,sql,Mysql,Sql,有没有办法指定Mysql结果排序的最后一个值。如果我有下表 id | Colour 1 | Blue 2 | Red 3 | Yellow 4 | Green 我能让我的查询结果最后显示为“红色”吗 SELECT * FROM colours ORDER By colours ASC [but show Red last] 这是一种工作,但会得到你想要的 (SELECT * FROM colours WHERE Colour !

有没有办法指定Mysql结果排序的最后一个值。如果我有下表

id    |   Colour
 1    |   Blue
 2    |   Red
 3    |   Yellow
 4    |   Green
我能让我的查询结果最后显示为“红色”吗

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

这是一种工作,但会得到你想要的

(SELECT * FROM colours WHERE Colour != 'Red' ORDER By Colour ASC)
UNION SELECT * FROM colours WHERE Colour = 'Red'

您可以使用案例陈述来映射您的颜色:

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

您需要在您的
ORDER BY
中使用一些条件逻辑。这将按照您想要的特定顺序对数据进行排序,
Red
始终是最后一个:

SELECT id, colour
FROM colours
ORDER BY 
  CASE 
    WHEN colour <> 'Red' 
    THEN 1 ELSE 2 END, colour;
看。两个版本都将返回:

| ID | COLOUR |
|----|--------|
|  1 |   Blue |
|  4 |  Green |
|  5 | Orange |
|  6 |   Teal |
|  3 | Yellow |
|  2 |    Red |

在某些情况下,您可能需要使用单列排序来完成此操作。一些查询/平台要求排序列作为输出的一部分

SELECT
    id, colour,
    case when colour = 'Red' then 'zzzzz' else '' end + colour as colour_sort
FROM colours 
ORDER By colour_sort

你会认为把它们都处理掉是有意义的。也许是因为你颠倒了顺序才投了反对票?不确定。这对我来说是个惊喜!我想这样你就可以保证顺序,比如说,如果是一个条形图,或者颜色的实际视觉顺序很重要的东西。实际上OP想要按颜色名称的字母顺序排序。所以你的也有其他的问题。但我猜不出为什么。这个命令通常适用于整个工会。虽然不确定这在某些平台上是否有效。MySQL支持这一点,但大多数其他平台不支持。这是一个有效的解决方案。虽然它确实有缺点,但也不需要大小写表达式。对于一个奇怪的平台来说,这可能是最好的解决方案。你可能会争辩说,测试相等性比将排序值设置为更高的数字更简单。很明显,这在最后并没有什么区别。@shawnt00正确,只是为了说明这两种方法都有效,我对我的答案进行了编辑,将其包括在内。有些人对此感到非常激动。我通常不是其中之一。在颜色表中添加
rank
列,用整数填充,然后按colors.rank排序。
SELECT
    id, colour,
    case when colour = 'Red' then 'zzzzz' else '' end + colour as colour_sort
FROM colours 
ORDER By colour_sort