窗口函数能够与下面这些函数结合使用: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
运行结果
由上图能够看出,能够获得累计差值。