是否通过/排序来暗示查询中的顺序?

时间:2018-10-27 13:31:15

标签: sql oracle sql-order-by

我看不出有什么区别

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;

按/分区是否暗含查询的顺序?

2 个答案:

答案 0 :(得分:1)

这两个查询之间的区别在于,第二个查询将依次由TYPEXTIME升序排列,而第一个查询在理论上将具有随机顺序。

调用PARTITION BY中使用的ORDER BYFIRST_VALUE子句会影响该特定的分析功能,但 not 本身不会影响最终的结果集的顺序。

通常,如果要在SQL中对结果集进行排序,则需要使用ORDER BY子句。如果您的两个查询 happen 现在都具有相同的排序,则只是偶然,并且不能保证。这怎么可能发生?好吧,如果Oracle正在迭代表的聚集索引,并且该顺序恰好与ORDER BY TYPE, XTIME一致,那么即使使用ORDER BY,甚至,您也会看到该顺序。

答案 1 :(得分:1)

不,不是。

仅当查询的结果集具有显式order by子句时,才对其排序。否则结果集按任意顺序排列。通常,用于运行查询的基础算法确定结果集的顺序。

仅当对最外面的order by使用select子句时,才能依赖最终顺序。结果集的顺序相同只是一个巧合

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

min(xtime) over (partition by type)