【Mysql系列】LAG与LEAD开窗函数

这篇具有很好参考价值的文章主要介绍了【Mysql系列】LAG与LEAD开窗函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
【Mysql系列】LAG与LEAD开窗函数,s5 数据库,mysql,数据库

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一.基本介绍

1.LAG 和 LEAD 概述

在数据库查询中,开窗函数(Window Functions)是一种强大的工具,用于在结果集的子集上执行计算。LAGLEAD是两个常用的开窗函数,它们允许你在当前行的前面或后面的行中访问数据。
在数据库中,LAGLEAD函数的全称是:

  • LAG函数的全称是"LAST VALUE"。
  • LEAD函数的全称是"LEAD VALUE"。

这两个函数是 SQL 标准中的开窗函数,它们允许在查询结果的子集上执行类似于聚合函数的计算,但不会导致结果集的单一行。它们的目的是在当前行的前面(LAG)或后面(LEAD)的行中访问数据,使得在处理时间序列数据或需要比较相邻行之间的值时非常有用。

2.作用特性

Lag 和 Lead 分析函数可以在同一次查询中取出同一字段的前 N 行的数据(Lag)和后 N 行的数据(Lead)作为独立的列。

在实际应用当中,若要用到取今天和昨天的某字段差值时,Lag 和 Lead 函数的应用就显得尤为重要。当然,这种操作可以用表的自连接实现,但是 LAG 和 LEAD 与 left join、right join 等自连接相比,效率更高,SQL 更简洁。

3.LAG 函数

LAG函数用于获取结果集中当前行之前的某一行的值。语法如下:

LAG (expression, offset, default) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
  • expression: 要检索的列或表达式。
  • offset: 要返回的行数,如果不指定,默认为 1,即上一行。
  • default: 当指定的行数超出结果集范围时,返回的默认值。

4.LEAD 函数

LEAD函数用于获取结果集中当前行之后的某一行的值。语法如下:

LEAD (expression, offset, default) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
  • expression: 要检索的列或表达式。
  • offset: 要返回的行数,如果不指定,默认为 1,即下一行。
  • default: 当指定的行数超出结果集范围时,返回的默认值。

二.使用案例

1.LAG 示例

考虑一个名为sales的表,包含销售数据:

CREATE TABLE sales (
    sale_date DATE,
    revenue INT
);

INSERT INTO sales VALUES
('2023-01-01', 100),
('2023-01-02', 150),
('2023-01-03', 200),
('2023-01-04', 120);

使用LAG函数,你可以获取前一天的销售额:

SELECT sale_date                                             -- 日期
     , revenue                                               -- 当前销售额
     , LAG(revenue) OVER (ORDER BY sale_date) AS lag_revenue -- 前一行的销售额
FROM sales;

结果:

| sale_date  | revenue | lag_revenue |
|------------|---------|-------------|
| 2023-01-01 | 100     | NULL        |
| 2023-01-02 | 150     | 100         |
| 2023-01-03 | 200     | 150         |
| 2023-01-04 | 120     | 200         |

2.LEAD 示例

使用LEAD函数,你可以获取后一天的销售额:

SELECT sale_date                                               -- 日期
     , revenue                                                 -- 日期
     , LEAD(revenue) OVER (ORDER BY sale_date) AS lead_revenue -- 后一行的销售额
FROM sales;

结果:

| sale_date  | revenue | lead_revenue |
|------------|---------|--------------|
| 2023-01-01 | 100     | 150          |
| 2023-01-02 | 150     | 200          |
| 2023-01-03 | 200     | 120          |
| 2023-01-04 | 120     | NULL         |

在这两个示例中,LAGLEAD函数通过ORDER BY子句按销售日期对结果集进行排序。这允许你在时间序列数据中访问前一行或后一行的值,以进行比较或计算差异等操作。

3.总结说明

  1. 时间序列分析: 在时间序列数据中,你可能需要比较当前时间点的值与前一时间点或后一时间点的值,以便分析趋势、变化或周期性。
  2. 差异计算: 你可能需要计算当前行与前一行或后一行的差异,例如,计算每日销售额的增长或减少量。
  3. 移动平均计算: 通过结合LAGLEAD函数,你可以计算移动平均值,以平滑数据并更好地理解趋势。
  4. 排名和百分比计算: 通过比较当前行与前一行或后一行的值,你可以进行排名或计算百分比变化,从而了解相对于其他行的位置或变化。
  5. 查找极值点: 通过比较当前值与相邻值,你可以轻松地识别极值点,例如找到峰值或谷值。
  6. 数据填充: 你可以使用LAGLEAD函数来填充缺失的数据。如果某些行的数据缺失,你可以使用相邻行的值进行填充。
  7. 数据平滑计算: 你可以使用LAGLEAD函数来进行数据平滑计划,让结果绘制的曲线更加平滑。这种操作可以代替表的自联接,并且 LAG 和 LEAD 有更高的效率。

LAG 和 LEAD 主要用来计算当前行的前后 N 行的这种场景,一般情况下我们会对数据进行排序,因为只有在有序的情况下,前面多少行和后面多少行才有意义。

LAG 和 LEAD 可以用在某些场景下代替自关联的写法。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【Mysql系列】LAG与LEAD开窗函数,s5 数据库,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-751711.html

到了这里,关于【Mysql系列】LAG与LEAD开窗函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hive lag() 和lead()函数

    Hive 中的 LAG 和 LEAD 函数时,通常用于在结果集中获取同一列在前一行( LAG )或后一行( LEAD )的值。这在分析时间序列数据、计算变化率或查找趋势时非常有用。以下是这两个函数的用法示例: 1. LAG 函数: LAG 函数用于获取前一行的值。它的基本语法是: column_expression :

    2024年02月12日
    浏览(57)
  • Hive之窗口函数lag()/lead()

    lag()与lead函数是跟偏移量相关的两个分析函数 通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤,该操作可代替表的自联接,且效率更高 lag()/lead() lag(col,n,DEFAULT)用于统计窗口内往上第n行值  第

    2024年02月15日
    浏览(44)
  • 【MySQL系列】数据库基础学习_简单认识数据库

    「前言」文章内容大致是数据库基础,以及数据库的基本知识。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 我见青山多妩媚,料青山、见我应如是。 ——辛弃疾《贺新郎》 MySQL实际上是一个网络服务(client/server模式

    2024年02月15日
    浏览(43)
  • 【MySQL系列】--初识数据库

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 数据库是结构化信息

    2024年02月12日
    浏览(56)
  • MySQL数据库:内置函数

    规定:日期:年月日       时间:时分秒 函数名称 作用描述 current_date() 当前日期 current_time() 当前时间 current_timestamp() 当前时间戳 date(datetime) 返回datetime参数的日期部分 date_add(date,interval d_value_type) 在date中添加时间或日期。interval后面可以是year、day、minute、second date_sub(da

    2024年02月11日
    浏览(45)
  • 【Spring/MySQL数据库系列】数据库事务的特点与隔离级别

    ⭐️ 前面的话 ⭐️ 本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍有关数据库事务的特点以及隔离级别。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由 未见花闻 原创, CSDN 首发! 📆首发时间:🌴2023年5月20日🌴 ✉️坚

    2024年02月05日
    浏览(53)
  • 【MySql系列】深入解析数据库索引

    MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。 在本文中,我们将深入解析MySQL索引,探讨它们的重要性、类型、创建、维护以及最佳实践。 在数据库中,索引

    2024年02月08日
    浏览(71)
  • 【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

    在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。 本篇就来分享一下使用c

    2024年02月02日
    浏览(62)
  • 【Mysql系列】——详细剖析数据库“索引”【上篇】

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法,数据库等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮

    2024年02月02日
    浏览(54)
  • MySQL数据库创建表一系列操作

    1. 创建表         在MySQL数据库中,创建新表使用CREATE TABLE语句。语法格式: CREATE[ TEMPORARY ]TABLE[ IF NOT EXISTS] table_name [ ([ column_definition ],…… [ index_definition ])] [ table_option][ SELECT_statement] ;   【例4.1】在学生信息数据库stusys中创建student表。 在MySQL命令行客户端输入如下SQL语句

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包