Oracle 窗口函数 的使用

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

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

0.表数据code

1.计算累计和
排序

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

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

函数解释:class

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

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

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

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

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

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

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

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

运行结果


由上图能够看出,能够获得累计和值。

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

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

结果以下


由上图能够看出,能够获得编号与累计和值。

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

运行结果

由上图能够看出,能够获得累计差值。

相关文章
相关标签/搜索