SQL

阅读: 评论:0

SQL

SQL

文章目录

  • 前言
  • 1. lag()
  • 2. lead()
  • 3. 列累加运算sum()
  • 4. rows number preceding


前言

本文主要记录SQL-跨行计算/lag()/lead()相邻两行某列数据四则计算的相关笔记,这两个函数可以获取当前行的后一行数据或者前一行数据,可以用于计算每日或者每此记录的增量计算,或者计算相邻两行某列差值。文章也使用sum()函数,rows n preceding语法进行累加运算。


1. lag()

lag()指获取当前行当前列第前n行当前列数据,完整函数参数如下:

lag(list_name,offset,default_value)

·list_name:列名
·offset:偏移的offset,获取当前行当前列的第前offset行当前列数据。
·default_value:如果偏移位置没有数据,则取default_value。
现有一张表table1,里面由三列数据(“id”,“name”,“num”),具体内容如下:

下面我们根据name分组,以num从小到大进行排序,然后使用lag()获取前一行数据命名为列lo。
代码如下:

select name,num,lag(num,1,0)over(partition by name order by num)lo from table1

执行结果如下:

2. lead()

lag()指获取当前行当前列第后n行当前列数据,完整函数参数如下:

lead(list_name,offset,default_value)

参数解释同lag(),同样使用table1表来进行举例。
下面根据name分组,以num从小到大进行排序,然后使用lead()获取后一行数据命名为列lo。
代码如下:

select name,num,lead(num,1,0)over(partition by name order by num)lo from table1

执行结果如下:

3. 列累加运算sum()

获取num列从第1行到当前行的累加和数据,以name进行分组,完整函数参数如下:

sum(num)over(partition by name order by num)

查询结果

4. rows number preceding

对截至至当前日期共7天的数据进行列(“column1”)累加计算,此时number取值为6,完整函数参数如下:

select date1,sum(column1)over(order by date1 rows 6 preceding) from table1

本文发布于:2024-01-28 04:58:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063890864949.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:SQL
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23