窗口函数可以与下面这些函数结合使用: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,窗口的终点是当前行,默认值,可以省略。
整个表达式的意思是从查询记录的第一行开始,到最后一行结束,查询出累加值。
每次处理窗口的一行记录时,都是从该窗口的第一条记录开始。每一行记录出来完之后,就将当前行的数量加到累计和中,并向下移动窗口的终点到下一行。循环处理,直到最后一行的记录被处理。
运行结果
由上图可以看出,可以得到累计和值。
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
运行结果
由上图可以看出,可以得到累计差值。