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 BY
和 ORDER BY
子句对该特定分析函数有影响,但 不会 自己影响结果集的最终顺序。
一般来说,如果要对SQL中的结果集进行排序,则需要使用ORDER BY
子句。如果您的两个查询 碰巧 现在具有相同的顺序,这只是偶然,并且不能保证。这怎么可能发生?好吧,如果 Oracle 正在迭代您的 table 的聚集索引,并且该顺序恰好与 ORDER BY TYPE, XTIME
一致,那么即使 没有 使用 ORDER BY
.
不,不是。
查询的结果集仅在具有显式 order by
子句时才排序。否则结果集是 任意 顺序。通常,用于 运行 查询的底层算法决定了结果集的排序。
只有在最外层有一个order by
子句时才能依赖最终排序select
。结果集在同一个顺序纯属巧合
我很好奇你为什么不简单地使用它?
min(xtime) over (partition by type)
我看不出有什么区别:
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 BY
和 ORDER BY
子句对该特定分析函数有影响,但 不会 自己影响结果集的最终顺序。
一般来说,如果要对SQL中的结果集进行排序,则需要使用ORDER BY
子句。如果您的两个查询 碰巧 现在具有相同的顺序,这只是偶然,并且不能保证。这怎么可能发生?好吧,如果 Oracle 正在迭代您的 table 的聚集索引,并且该顺序恰好与 ORDER BY TYPE, XTIME
一致,那么即使 没有 使用 ORDER BY
.
不,不是。
查询的结果集仅在具有显式 order by
子句时才排序。否则结果集是 任意 顺序。通常,用于 运行 查询的底层算法决定了结果集的排序。
只有在最外层有一个order by
子句时才能依赖最终排序select
。结果集在同一个顺序纯属巧合
我很好奇你为什么不简单地使用它?
min(xtime) over (partition by type)