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)