SQL 对结果排序

SQL 对结果排序,你想对 EMP 表里的工资值排序,并且允许 Tie。你希望返回如下所示的结果集。

SQL 对结果排序 问题描述

你想对 EMP 表里的工资值排序,并且允许 Tie。你希望返回如下所示的结果集。

RNK        SAL
--- ----------
  1        800
  2        950
  3       1100
  4       1250
  4       1250
  5       1300
  6       1500
  7       1600
  8       2450
  9       2850
 10       2975
 11       3000
 11       3000
 12       5000

SQL 对结果排序 解决方案

窗口函数使得排序操作变得极其简单、方便。有 3 种窗口函数对于排序非常有用:DENSE_RANK OVERROW_NUMBER OVERRANK OVER
DB2、Oracle 和 SQL Server
因为允许 Tie,所以这里选择了窗口函数 DENSE_RANK OVER

1 select dense_rank() over(order by sal) rnk, sal
2   from emp

MySQLPostgreSQL
因为不支持窗口函数功能,我们应该用标量子查询来对工资排序。

1  select (select count(distinct b.sal)
2            from emp b
3           where b.sal <= a.sal) as rnk,
4         a.sal
5    from emp a

SQL 对结果排序 扩展知识

DB2、Oracle 和 SQL Server
窗口函数 DENSE_RANK OVER 完成了大部分工作。OVER 关键字后面的括号里要放一个 ORDER BY 子句以指定用于排序的列。本解决方案使用的是 ORDER BY SAL,因此 EMP 表是按照工资递增的顺序来排序的。
MySQLPostgreSQL
标量子查询的输出结果类似于 DENSE_RANK 函数,因为标量子查询是基于 SAL 展开迭代计算处理的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程