lead和lag函式
lag和lead函式,用於取出資料的前n行的資料和後n行的資料,當然要和over(order by)一起組合
select id,name from dave
id name
4 SF
3 oracle
4 eygle
5 rman
4 export
dave表中有id和name的資料。lag函式是取出資料的前n行的資料,lead函式是取出資料的後n行的資料,直接在例子吧,簡單明瞭
select id,name,lag(id,4) over (order by id) as v_ab from dave
id name v_ab
3 oracle
4 export
4 SF
4 eygle
5 rman 3
lag(id,n,values)才是整個lag的完整形式,其中的id是column_name,n就是前n行的,values就是預設的值,如果省略n和values,預設n是1,values是null
其實完全可以理解n就是當前行的前n行的資料,如果有就顯示,沒有就顯示values或者null值。上面的結果也可以解釋了。
lag函式後有個over(order by id)其中的order by讓資料重新asc排序了,所以lag函式是必須建立在order by的情況下,當然也可以order by name,不過最後顯示的結果都是先order by然後對其lead或者lag的n行
當然lead函式和lad基本一樣,不同的是一個是前n行一個是後n行
select id,name,lead(id,4) over(order by id) as v_ab from dave
3 oracle 5
4 export
4 SF
4 eygle
5 rman
select id,name,lead(id,4) over(order by 1) as v_ab from dave
上面的order by 1對嗎,有結果嗎,對的也是有結果的。
select id,name from dave order by 2 排序了
ORDER BY 項必須是 SELECT-list 表示式的數目,也就是前面的select column的列的總數範圍內。
select id,name from dave order by 3,此時oracle就會報錯了,因為無法排序找不到第三列column。
但是下面的
select id,name,lead(id,4) over(order by id) as v_ab from dave,此時檢視sql執行計劃是有window sort的排序計劃,windows sort是一個視窗資料的排序,執行效率比全域性sort order by要高。
現在就關於order by的討論就到這了,想用lead但是又不想透過order by來改變lead的值,就直接select id,name,lead(id,4) over(order by 1) as v_ab from dave。
當然總結歸總結,還是要多用,oracle就是一個不斷學習不斷否定自己堅定自己的過程吧!別的也一樣吧!再次感謝大家對俺的囉嗦!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1053127/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- lag和lead函式函式
- oracle函式之lag和leadOracle函式
- oracle中lead和lag函式Oracle函式
- 使用LAG和LEAD函式統計函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- oracle之函式LAG,LEADOracle函式
- mysql實現oracle的lead和lag函式功能MySqlOracle函式
- oracle lag與lead分析函式簡介Oracle函式
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- Hive 分析函式lead、lag例項應用Hive函式
- [Oracle]高效的SQL語句之分析函式(四)--lag()/lead()OracleSQL函式
- oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)Oracle函式
- 分析函式 - LAG函式
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- 關於lag函式的用法函式
- 【SQL】Lag/Rank/Over視窗函式揭秘,資料分析之旅SQL函式
- Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)Oracle函式
- 字元函式、數字函式和日期函式字元函式
- 類函式和物件函式 PHP函式物件PHP
- 函式防抖和函式節流函式
- 函式基礎和函式引數函式
- Rust中的into函式和from函式Rust函式
- Python strip函式和split函式Python函式
- ascii函式和substr函式的用法ASCII函式
- 指標函式 和 函式指標指標函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- 函式宣告和函式表示式的區別函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- JS函式節流和函式防抖JS函式
- gethostbyname函式和getservbyname函式的應用函式
- Socket send函式和recv函式詳解函式
- prop()函式和attr()函式的區別函式
- ES6-Generator 函式 和 async 函式函式
- JS閉包函式和回撥函式JS函式
- Python私有函式和公開函式Python函式