SQL 对结果排序,你想对 EMP
表里的工资值排序,并且允许 Tie。你希望返回如下所示的结果集。
SQL 对结果排序 问题描述
你想对 EMP
表里的工资值排序,并且允许 Tie。你希望返回如下所示的结果集。
SQL 对结果排序 解决方案
窗口函数使得排序操作变得极其简单、方便。有 3 种窗口函数对于排序非常有用:DENSE_RANK OVER
、ROW_NUMBER OVER
和 RANK OVER
。
DB2、Oracle 和 SQL Server
因为允许 Tie,所以这里选择了窗口函数 DENSE_RANK OVER
。
MySQL 和 PostgreSQL
因为不支持窗口函数功能,我们应该用标量子查询来对工资排序。
SQL 对结果排序 扩展知识
DB2、Oracle 和 SQL Server
窗口函数 DENSE_RANK OVER
完成了大部分工作。OVER
关键字后面的括号里要放一个 ORDER BY
子句以指定用于排序的列。本解决方案使用的是 ORDER BY SAL
,因此 EMP
表是按照工资递增的顺序来排序的。
MySQL 和 PostgreSQL
标量子查询的输出结果类似于 DENSE_RANK
函数,因为标量子查询是基于 SAL
展开迭代计算处理的。