SQL查询进阶-开窗函数

简介

开窗函数又称分析函数,是用于对数据库数据进行实时分析处理。窗口函数就是为了实现OLAP而添加的标准SQL功能。下面重点介绍Lag函数 和 Lead函数使用方法,分别用于获取在某些条件限制下列表数据中当前行之前或之后 偏移 n 行的值,通常在需要比较相邻行数据或进行时间分析时使用。

LAG函数

  • Lag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。
  • 语法如下
LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
  • 参数示意
    1) column_name:要获取值的列名。
    2)offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
    3)default_value:可选参数,用于指定当没有前一行时的默认值。
    4)PARTITION BY和ORDER BY子句可选,用于分组和排序数据。

LEAD函数

  • Lead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。
  • 语法如下
LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
  • 参数示意
    1) column_name:要获取值的列名。
    2)offset:表示要向下偏移的行数。例如,offset为1表示获取下一行的值,offset为2表示获取下两行的值,以此类推
    3)default_value:可选参数,用于指定当没有前一行时的默认值。
    4)PARTITION BY和ORDER BY子句可选,用于分组和排序数据。

应用

  1. 学生成绩表 scores,其中包含学号、成绩和考试日期,数据如下:
student_id exam_date score
101 2023-01-01 85
101 2023-01-05 78
101 2023-01-10 92
101 2023-01-15 80
  1. 要求:查询每个学生所有参加的考试日期和上一次考试的成绩和下一次考试成绩,用于观察学生考试成绩浮动,示例SQL如下:
SELECT 
    student_id,
    exam_date,
    score,
    LAG(score, 1, NULL) OVER (PARTITION BY student_id ORDER BY exam_date) AS previous_score,
    LEAD(score, 1, NULL) OVER (PARTITION BY student_id ORDER BY exam_date) AS next_score
FROM
    scores;

3.查询结果

student_id exam_date score previous_score next_score
101 2023-01-01 85 NULL 78
101 2023-01-05 78 85 92
101 2023-01-10 92 78 80
101 2023-01-15 80 92 NULL
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • over在聚合函数中的使用:一般格式:聚合函数名(列) over(选项)over必须与聚合函数或排序函数一起使用...
    酸甜柠檬26阅读 10,810评论 0 5
  • 1. 介绍 普通聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通聚合函数每组(Group by)只有一...
    Yobhel阅读 3,677评论 0 2
  • 一、常用计算方法 二、时间相关 三、数组类型操作 四、数据处理 五、编码与进制 六、from解析 七、字符串操作 ...
    一只当归阅读 13,138评论 0 2
  • 在使用数据库/数据仓库的过程中,我们可能会遇到以下几个情况: 需要得到的数据既要包括聚合后的数据, 也需要包括没被...
    Soothingday阅读 10,427评论 0 1
  • MySQL提供了一些开窗函数来对查询结果进行分组和排序。 1. ROW_NUMBER()函数:用于为结果集中的每一...
    佛白506阅读 4,241评论 0 1

友情链接更多精彩内容