窗口函數能夠與下面這些函數結合使用: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
運行結果
由上圖能夠看出,能夠獲得累計差值。