我有一张表,其中包含人员姓名及其职级。等级是SET。每个人可能具有一个或多个Rank值(例如,Ass。Chief可能也是Instructor)。
期望的结果是按排名从高到低排序的人员列表,因此,行政助理。船长,船长等
我正在按集合中的特定值对结果进行排序,该结果按我的预期几乎可以正常运行。挂断是指一行中有多个值,则不对它们进行排序。
如果所有字段都只有一个值,这将非常有效。
源数据如下:
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
“排名”具有两个值的行浮在搜索结果的顶部。
我知道这可能是我所缺少的简单事物-我在做什么错?
答案 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
此查询产生所需的结果。