为什么OVER子句中的ORDER BY也会影响我的结果集?

时间:2014-04-21 10:33:53

标签: sql oracle

我写的时候:

SELECT deptno,ename, RANK () OVER (PARTITION BY deptno ORDER BY sal DESC) rank 
FROM emp

我得到sal和deptno排序的结果集,但为什么呢?我没有在主ORDER BY中指定它?

1 个答案:

答案 0 :(得分:6)

如果您没有指定主ORDER BY,则您收到结果的顺序是未指定的,并且将是数据库系统最容易找到的顺序。通常假设默认顺序是行存储在磁盘上的物理顺序,但这是不正确的,这就是数据库通常(不总是)最简单的顺序。

在这种特定情况下,排序所有结果可以更容易地计算排名,并且仍然可以提供您要求的结果。