1

当我

SELECT * FROM table_A WHERE id = 2321 order by color asc, color = 49, color = 2;

这将返回所有颜色 = 2,然后颜色 = 49,然后是所有其他颜色。

但我只需要按结果分组

SELECT * FROM table_A WHERE id = 2321 GROUP BY color ORDER BY color asc, color = 49, color = 2;

它将按结果返回分组但忽略顺序

我的问题是如何返回从 2 开始的颜色,然后是 49,然后是其他颜色并将“颜色”分组?

4

2 回答 2

2

GROUP BY这里不需要。您只需要使用FIELD()

ORDER BY FIELD(color, 49, 2) DESC

这将Color = 2首先在列表中排序,然后是49其他颜色。

于 2013-05-28T03:55:36.250 回答
0

如果您关心其余颜色的顺序,您可以使用CASE

SELECT color 
  FROM table_A 
 WHERE id = 2321 
 GROUP BY color
 ORDER BY CASE color 
            WHEN 2 THEN 1 
            WHEN 49 THEN 2
            ELSE color + 50
          END

这将2首先排序49,然后排序其他颜色 ASC。这是假设颜色总是积极的int

SQLFiddle

于 2013-05-28T04:21:48.197 回答