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

運行結果

由上圖能夠看出,能夠獲得累計差值。

相關文章
相關標籤/搜索