请知道是否可以在SQL中以与标准的字母数字排序列不同的格式对查询结果进行排序。例如,考虑表“表”,
以下脚本将按“Color”列按字母顺序排列该表:
SELECT * FROM Table ORDER BY Color;
我怎么能订购这样的颜色顺序是绿色,蓝色,红色?也就是说,如何使用我定义的订单格式进行订购?
发布于 2018-10-13 07:23:19
使用MySQL时:
ORDER BY FIELD(Color,'GREEN','BLUE,'RED') ASC
文档:字段
注意字段(.)如果第一个参数的值在后面的参数中根本不存在,或者当它为NULL时,则计算为0。因此,如果这些案例中的任何一个属于这些可能性,那么你需要格外小心,否则,这些都将是最重要的结果。因此,在这种情况下,我亲自提供了所需的反向顺序,并使用DESC,例如,在您的情况下:
ORDER BY FIELD(Color,'RED','BLUE,'GREEN') DESC
发布于 2018-10-13 07:19:32
你可以用CASE
SELECT *
FROM Table
ORDER BY CASE Color WHEN 'GREEN' THEN 1 WHEN 'BLUE' THEN 2 ELSE 3 END;
发布于 2018-10-13 07:32:30
FIELD
订购可能是您在MySQL中的最佳即时解决方案。但是,一个可能的长期解决方案是添加另一个表来维护基于颜色的排序顺序,例如TableColor
Color | Position
GREEN | 1
BLUE | 2
RED | 3
然后,您只需要将此表加入到当前表中,就可以使用该表进行排序:
SELECT t1.*
FROM yourTable t1
INNER JOIN TableColor t2
ON t1.Color = t2.Color
ORDER BY
t2.Position;
这种方法的优点是,如果你最后有几十种不同的颜色,它就能很好地缩放。在这种情况下,FIELD
表达式,或者更糟糕的是,CASE
表达式,不能很好地扩展,而且可能很难维护。
https://stackoverflow.com/questions/52794405
复制相似问题