如何实现带特定值优先级的多级ORDER BY排序?
实现自定义优先级的多级ORDER BY排序
嘿,要实现你这种自定义优先级的多级排序,用SQL里的CASE表达式就可以轻松搞定啦!它能让咱们手动指定每个字段的排序权重,完美匹配你要的规则。
先来看你的原始数据表格:
| 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 |
具体实现思路
我们需要在ORDER BY里嵌套CASE语句,分别给City和Role指定自定义的排序优先级:
- 第一级(City):给Delhi分配最小的权重(比如1),Mumbai分配2,其他所有城市分配3——这样权重小的会排在前面,正好符合Delhi > Mumbai > 其他的优先级
- 第二级(Role):给Project Manager分配1,Designer分配2,其他角色分配3,实现Project Manager > Designer > 其他的排序逻辑
完整SQL查询语句
SELECT Code, City, Role FROM your_table_name ORDER BY -- 第一级:自定义城市优先级 CASE City WHEN 'Delhi' THEN 1 WHEN 'Mumbai' THEN 2 ELSE 3 END, -- 第二级:自定义角色优先级 CASE Role WHEN 'Project Manager' THEN 1 WHEN 'Designer' THEN 2 ELSE 3 END;
排序后的结果
执行上面的查询后,你会得到如下排序后的结果:
| 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 |
你看,这个结果完全符合你要求的排序规则:先按Delhi、Mumbai、其他城市分组,每个城市组内再按Project Manager、Designer、其他角色排序。
内容的提问来源于stack exchange,提问作者traveloid
相关产品推荐
相关产品推荐

