序言
在平時的工作中,由于主要接觸ERP方面的業(yè)務數(shù)據(jù)處理,Oracle的分析函數(shù)一直沒怎么使用君编,但隨著公司開始做數(shù)據(jù)分析,Oracle的分析函數(shù)出現(xiàn)的越來越頻繁川慌。因此準備把分析函數(shù)中重要的幾個常用函數(shù)用法分析下吃嘿。
分析函數(shù)之Lag()
Lag(): 在查詢中取出同一字段前N行的數(shù)據(jù)作為獨立的列。
語法格式如下:
lag(column1,N,"xxxx") over(partition by column2 order by column3)
表達式理解為:按column2進行分組且根據(jù)column3進行排序梦重,取column1前N行(往前數(shù)第N行)的列值兑燥,如果為空則用xxxx進行默認。
舉例如下:
采用lag方式查詢前1行l(wèi)ookup_code的值
如上圖琴拧,如果將默認值改為NULL降瞳,則lookup_code對應的pre_code就會變?yōu)榭铡?改為N,則變?yōu)榍暗贜行挣饥。
由此可以想到除师,采用該方式可以計算環(huán)比以及同比,同比與表間join扔枫,該函數(shù)將大大減少SQL的量汛聚。
分析函數(shù)之Lead()
Lead(): 在查詢中取出同一字段后N行的數(shù)據(jù)作為獨立的列。
語法格式如下:
lead(column1,N,"xxxx") over(partition by column2 order by column3)
表達式理解為:按column2進行分組且根據(jù)column3進行排序短荐,取column1后N行(往后數(shù)第N行)的列值倚舀,如果為空則用xxxx進行默認。
舉例如下:
如上例可見忍宋,獲取lookup_code后N列的值痕貌。
總結(jié)
lag和lead的函數(shù),主要應用于查找前后行的列記錄讶踪,使用這兩個分析函數(shù)芯侥,可以減少子查詢或表關聯(lián),并且能夠大大提升sql語句性能乳讥。