partition by / order by 是否暗示查询中的排序?

Does partition by / order by imply ordering in a query?

我看不出有什么区别:

select
  ID,
  TYPE,
  XTIME,
  first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES;

和:

select
  ID,
  TYPE,
  XTIME,
  first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES
order by TYPE, XTIME;

分区依据/排序依据是否暗示查询中的排序?

这两个查询的不同之处在于,第二个查询按 TYPE 升序排列,然后 XTIME,而第一个查询在理论上是随机排序的。

调用 FIRST_VALUE 时使用的 PARTITION BYORDER BY 子句对该特定分析函数有影响,但 不会 自己影响结果集的最终顺序。

一般来说,如果要对SQL中的结果集进行排序,则需要使用ORDER BY子句。如果您的两个查询 碰巧 现在具有相同的顺序,这只是偶然,并且不能保证。这怎么可能发生?好吧,如果 Oracle 正在迭代您的 table 的聚集索引,并且该顺序恰好与 ORDER BY TYPE, XTIME 一致,那么即使 没有 使用 ORDER BY.

不,不是。

查询的结果集仅在具有显式 order by 子句时才排序。否则结果集是 任意 顺序。通常,用于 运行 查询的底层算法决定了结果集的排序。

只有在最外层有一个order by子句时才能依赖最终排序select结果集在同一个顺序纯属巧合

我很好奇你为什么不简单地使用它?

min(xtime) over (partition by type)