前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 动态排序

SQL 动态排序

作者头像
白日梦想家
发布2020-07-18 18:33:10
1.4K0
发布2020-07-18 18:33:10
举报
文章被收录于专栏:SQL实现SQL实现

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

图 1 emp 原始表数据

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

图 2 结果集

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

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

代码语言:javascript
复制
SELECT   * FROM  emp ORDER BY   CASE    WHEN job = 'PRESIDENT'     THEN 0     WHEN job = 'MANAGER'     THEN 1     ELSE 2   END DESC,  sal

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

代码语言:javascript
复制
SELECT   *,  CASE    WHEN job = 'PRESIDENT'     THEN 0     WHEN job = 'MANAGER'     THEN 1     ELSE 2   END AS ordered FROM  emp ORDER BY ordered DESC,  sal
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档