ORACLE SQL - 分析函数(两个ORDER BYs)

时间:2017-03-30 03:15:53

标签: sql oracle window-functions

我试图在一个语句中找出两个“ORDER BY”的流程序列。

我有一个带有一个字段(GS_SEC)的表,其中包含自动生成的值,以156759开头,以32123087结尾。

  • GS_SEC
  • 156759
  • 156760
  • 156761
  • .....
  • 32123087

QUERY 1:

select GS_SEC, 
        max(GS_SEC) over (),
        avg(GS_SEC) OVER (ORDER BY GS_SEC DESC ) AS AAA 
from tblgs_reference  
where rownum < 11 

QUERY 2:

select GS_SEC, 
       max(GS_SEC) over (), 
       avg(GS_SEC) OVER (ORDER BY GS_SEC DESC ) AS AAA
from tblgs_reference
where rownum < 11 
order by  GS_SEC DESC

对于查询1,我得到的结果显示最大的10个GS_SEC值按降序排列+最大值为32123094 +从32123094开始递减平均值。

问题A :结果集的显示顺序是否由“ORDER BY GS_SEC DESC”的“DESC”引起?

对于查询2,我得到的结果显示最小的10个GS_SEC值按递减顺序+最大值为156768 +从156768开始递减平均值。

问题B :在计算中调用AVG函数时,ORACLE是否处理从“156759”或“156768”开始的记录?

问题C :我是否可以说语句最后一部分的“GS_SEC DESC的顺序”是最后处理的,对调用分析函数的方式没有影响?

问题D :两个查询之间的差异只是“ORDER BY GS_SEC DESC”。为什么它会导致差异,对于查询1,返回最大的10个GS_SEC值,而为查询2返回最小的10个GS_SEC值?

0 个答案:

没有答案