Mysql 指定要在排序结果中最后显示的值
有没有办法指定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 !
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