ORALCE函式:LAG()和LEAD() 分析函式詳解

風靈使發表於2018-11-08

LagLead分析函式可以在同一次查詢中取出同一欄位的前N行的資料(Lag)和後N行的資料(Lead)作為獨立的列。

在實際應用當中,若要用到取今天和昨天的某欄位差值時,LagLead函式的應用就顯得尤為重要。當然,這種操作可以用表的自連線實現,但是LAGLEADleft joinrightjoin等自連線相比,效率更高,SQL更簡潔。下面我就對這兩個函式做一個簡單的介紹。

函式語法如下:

lag(exp_str,offset,defval) over(partion by ..order by)

lead(exp_str,offset,defval) over(partion by ..order by)

其中exp_str是欄位名

Offset是偏移量,即是上1個或上N個的值,假設當前行在表中排在第5行,則offset 為3,則表示我們所要找的資料行就是表中的第2行(即5-3=2)。

Defval預設值,當兩個函式取上N/下N個值,當在表中從當前行位置向前數N行已經超出了表的範圍時,lag()函式將defval這個引數值作為函式的返回值,若沒有指定預設值,則返回NULL,那麼在數學運算中,總要給一個預設值才不會出錯。

完整例子:

1.資料庫中的原始資料
在這裡插入圖片描述

2.對SAL列:取上一個SAL列作為單獨的列,若不指定預設值,則預設值為NULL
在這裡插入圖片描述

3.對SAL列:取上一個SAL列作為單獨的列,指定預設值為0
在這裡插入圖片描述

4.對SAL列:取下一個SAL列作為單獨的列,指定預設值為0
在這裡插入圖片描述

5.做運算:看薪水跟上次相比漲了多少
在這裡插入圖片描述

相關文章