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

标签 sql oracle

当我写的时候:

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

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

最佳答案

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

在这种特定情况下,对所有结果进行排序可以更轻松地计算排名,并且仍然会为您提供所需的结果。

关于sql - 为什么 OVER 子句中的 ORDER BY 也会影响我的结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23195611/

相关文章:

sql - ORA-00904 :"MAY":INVALID IDENTIFIER

mysql - SQL通过阈值获取离线网站

Oracle创建表作为带有最大计数条件的选择

mysql - Oracle、MySQL 等 RDBMS 中的数据压缩

mysql - 使用mysql增量更新返回重复键错误

Oracle - 将日期值转换为 TO_CHAR()

java - while 循环花费太多时间

php - Wordpress 在 sql 查询中使用 $_GET

python - 使用 SQL 和 python 将时间单位添加到时间戳

PHP 和 PostgreSQL 交易?