视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle的lead和lag函数
2020-11-09 11:38:33 责编:小采
文档


lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合

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。

下载本文
显示全文
专题