当字段具有多个值时,如何按SET中的特定值排序

时间:2019-04-29 17:33:30

标签: mysql

我有一张表,其中包含人员姓名及其职级。等级是SET。每个人可能具有一个或多个Rank值(例如,Ass。Chief可能也是Instructor)。

期望的结果是按排名从高到低排序的人员列表,因此,行政助理。船长,船长等

我正在按集合中的特定值对结果进行排序,该结果按我的预期几乎可以正常运行。挂断是指一行中有多个值,则不对它们进行排序。

我从这里开始:enter image description here

如果所有字段都只有一个值,这将非常有效。

源数据如下:

id  Name    Rank
1   Alex    Member
2   Mary    Chief
3   Sally   Instructor
4   Joe     Assistant Chief,Instructor
5   Jim     Captain
6   Bill    Member
7   Evan    Lieutenant,Instructor

我的查询:

SELECT * FROM Members 
ORDER BY FIND_IN_SET(Rank, 'Chief,Assistant Chief,Captain,Lieutenant,Instructor,Member');

所需的结果是:

id  name    rank
2   Mary    Chief
4   Joe     Assistant Chief,Instructor
5   Jim     Captain
7   Evan    Lieutenant,Instructor
3   Sally   Instructor
1   Alex    Member
6   Bill    Member

实际结果如下:

id  name    rank
4   Joe     Assistant Chief,Instructor
7   Evan    Lieutenant,Instructor
2   Mary    Chief
5   Jim     Captain
3   Sally   Instructor
1   Alex    Member
6   Bill    Member

“排名”具有两个值的行浮在搜索结果的顶部。
我知道这可能是我所缺少的简单事物-我在做什么错?

1 个答案:

答案 0 :(得分:0)

我改用ORDER BY CASE。

SELECT * FROM Members 
ORDER BY CASE 
    WHEN FIND_IN_SET('Chief', rank) THEN 1 
    WHEN FIND_IN_SET('Assistant Chief',rank) THEN 2 
    WHEN FIND_IN_SET('Captain',rank) THEN 3
    WHEN FIND_IN_SET('Lieutenant',rank) THEN 4
    WHEN FIND_IN_SET('Instructor',rank) THEN 5
    WHEN FIND_IN_SET('Member',rank) THEN 6
ELSE 7
END

此查询产生所需的结果。