Mysql 我如何根据具有特定值的行的优先顺序进行多级排序?
样本表Mysql 我如何根据具有特定值的行的优先顺序进行多级排序?,mysql,sql,Mysql,Sql,样本表 +------+--------+------------------+ | Code | City | Role | +------+--------+------------------+ | 1 | Mumbai | Designer | | 2 | Mumbai | Designer | | 3 | Delhi | Designer | | 4 | Delhi | Projec
+------+--------+------------------+
| Code | City | Role |
+------+--------+------------------+
| 1 | Mumbai | Designer |
| 2 | Mumbai | Designer |
| 3 | Delhi | Designer |
| 4 | Delhi | Project Manager |
| 5 | Mumbai | Project Manager |
| 6 | Pune | Designer |
| 7 | London | Network Engineer |
+------+--------+------------------+
一级排序将在城市领域-首先是德里,然后是孟买,然后是其他任何地方。
级别2排序将在角色字段上-首先是项目经理,然后是设计师,然后是其他任何内容
排序后的输出应为
+------+--------+------------------+
| Code | City | Role |
+------+--------+------------------+
| 4 | Delhi | Project Manager |
| 3 | Delhi | Designer |
| 5 | Mumbai | Project Manager |
| 1 | Mumbai | Designer |
| 2 | Mumbai | Designer |
| 6 | Pune | Designer |
| 7 | London | Network Engineer |
+------+--------+------------------+
在MySQL中,一种方法是:
order by (case when city = 'Delhi' then 1
when city = 'Mumbai' then 2
else 3
end),
city,
(case when role = 'Project Manager' then 1
when role = 'Designer' then 2
else 3
end)
一种较短但有点神秘的方法使用:
order by field(city, 'Mumbai', 'Delhi') desc,
city,
field(role, 'Designer', 'Project Manager') desc
field()
在没有匹配项时返回0
。因此,参数的顺序与您希望搜索它们的方式相反。desc
然后将它们按正确的顺序排列。在MySQL中,一种方法是:
order by (case when city = 'Delhi' then 1
when city = 'Mumbai' then 2
else 3
end),
city,
(case when role = 'Project Manager' then 1
when role = 'Designer' then 2
else 3
end)
SELECT * FROM table
ORDER BY (case when City = 'Delhi' then 1
when City = 'Mumbai' then 2
else 3
end asc),
(case when role = 'Project Manager' then 1
when City = 'Designer' then 2
else 3
end asc)
一种较短但有点神秘的方法使用:
order by field(city, 'Mumbai', 'Delhi') desc,
city,
field(role, 'Designer', 'Project Manager') desc
field()
在没有匹配项时返回0
。因此,参数的顺序与您希望搜索它们的方式相反。desc
然后将它们按正确顺序排列。在order BY
中使用case
表达式。在order BY
中使用case
表达式。
SELECT * FROM table
ORDER BY (case when City = 'Delhi' then 1
when City = 'Mumbai' then 2
else 3
end asc),
(case when role = 'Project Manager' then 1
when City = 'Designer' then 2
else 3
end asc)