SQL 动态排序

时间:2022-07-22
本文章向大家介绍SQL 动态排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

有时候,我们希望依据某些条件逻辑来排序。比如,对于员工表 emp,我们希望按照薪资(sal )从低到高排序。有一个要求,处于管理岗位的职工排在普通员工的后面,即 job 等于 MANAGERPRESIDENT 的员工排在其它员工的后面,job 等于 PRESIDENT 的员工放在最后。也就是说,优先按照职位(job)的规则排序,再按照薪资(sal)排序。

图 1 emp 原始表数据

我们希望返回的结果集如下。

图 2 结果集

最简单的做法就是在 ORDER BY 子句后面使用 CASE 表达式。

由于 job 字段只是作为逻辑条件提供排序的依据,不能直接对它排序。我们可以将 job 字段的所有值划分为三类,每一个类用一个数值表示,再将这个分类的字段作为排序字段参与排序即可。

SELECT   * FROM  emp ORDER BY   CASE    WHEN job = 'PRESIDENT'     THEN 0     WHEN job = 'MANAGER'     THEN 1     ELSE 2   END DESC,  sal

另外,也可以把 CASE 表达式移到 SELECT 子句中。

SELECT   *,  CASE    WHEN job = 'PRESIDENT'     THEN 0     WHEN job = 'MANAGER'     THEN 1     ELSE 2   END AS ordered FROM  emp ORDER BY ordered DESC,  sal