Oracle 窗口函数 的使用

窗口函数可以与下面这些函数结合使用:sum()、avg()、max()、min()、count()、variance()、stddev()等。

窗口函数还可以与first_value和last_value结合使用,这时候返回窗口中的第一个值和最后一个值。

0.表数据

1.计算累计和

下面这个查询通过执行累计和操作计算出第一行到第三行的累加值,。

SELECT
    "SUM"(counts),"SUM"("SUM"(counts)) over (ORDER BY stock_id ROWS unbounded preceding)
FROM
    t_stockhistory
GROUP BY stock_id

函数解释:

sum(counts),计算出counts字段值的总和

sum(sum(counts)),计算出累计和值

group by xx,按照xx字段对查询到的记录进行排序

rows between unbounded preceding and current row,定义了窗口的起点和终点,窗口的终点是当前行。

unbounded preceding,窗口的起点行,包括循环取到的所有行。

current row,窗口的终点是当前行,默认值,可以省略。

整个表达式的意思是从查询记录的第一行开始,到最后一行结束,查询出累加值。

每次处理窗口的一行记录时,都是从该窗口的第一条记录开始。每一行记录出来完之后,就将当前行的数量加到累计和中,并向下移动窗口的终点到下一行。循环处理,直到最后一行的记录被处理。

运行结果

Oracle 窗口函数 的使用

由上图可以看出,可以得到累计和值。

2.第二种方式求累计和值

select
    stock_id,"SUM"(counts) over (ORDER BY stock_id ROWS unbounded preceding)
from 
    t_stockhistory

结果如下

Oracle 窗口函数 的使用

由上图可以看出,可以得到编号与累计和值。

3.第三种方式

select
    stock_id,"SUM"(counts) over (ORDER BY stock_id)
from 
    t_stockhistory

结果如下

4.计算累计差

select
    counts - sum(counts) over (ORDER BY stock_id ROWS unbounded preceding)
from 
    t_stockhistory

运行结果

Oracle 窗口函数 的使用

由上图可以看出,可以得到累计差值。


你可能感兴趣的:(Oracle 窗口函数 的使用)