MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL LEAD和LAG函数

LEAD和LAG是MySQL中的窗口函数,用于访问 前后值 分区中当前行的指定行的strong>。这些函数是非聚合函数。
MySQL中的 Window函数 用于对分区或窗口内的每一行执行操作或计算。这些函数产生的结果类似于使用聚合函数进行的计算。但是,与对整个表执行操作的聚合函数不同,窗口函数不会产生要分组为单个行的结果。因此,每一行都保持唯一标识。在window函数中,我们必须了解以下内容:
发生功能评估的行称为当前行 窗口是与当前行相关的行集合,或者是在该行上使用哪个函数进行操作的窗口。
让我们详细了解这些功能。

MySQL LEAD功能

该功能使我们可以向前看或向后看行从当前行获取/访问该行的值。计算同一输出中当前行与后续行之间的差异是一种非常有用的方法。
下面是在MySQL中使用LEAD函数的常规 语法:
LEAD(expression, offset , default_value) OVER (
    PARTITION BY (expr)
    ORDER BY (expr)
)

参数说明

LEAD函数语法包含以下参数。
参数 说明
expression 它是列名或任何内置函数,其值由该函数返回。
offset 它包含从当前行开始的行数。它应该是一个正整数值。如果为,则该函数将评估当前行的结果。如果我们忽略,则该函数默认使用1、
default_value 当当前行中没有后续行时,它将返回一个值。如果我们忽略这一点,该函数将返回空值
OVER OVER它负责将行划分为组。如果为,则该函数将使用所有行执行操作。
PARTITION BY 它将结果集中的行拆分为应用了功能的分区。如果未指定此子句,则将所有行都视为结果集中的单行。
ORDER BY 它确定在应用该功能之前分区中的行顺序。

MySQL LEAD()函数示例

在这里,我们将了解LEAD函数如何与MySQL表一起使用。首先,我们需要使用以下语句创建一个名为 sales_table 的表。
CREATE TABLE sales_table (
  Employee_Name VARCHAR(45) NOT null,
  Year int NOT null,
  Country VARCHAR(45) NOT null,
  Product VARCHAR(45) NOT null,
  Sale DECIMAL(12,2) NOT null,
  PRIMARY KEY(Employee_Name, Year)  
);
接下来,我们将使用 INSERT 语句将记录添加到该表中,如下所示:
INSERT INTO sales_table VALUES
('Stephen', 2017, 'India', 'Laptop', 10000),  
('Stephen', 2018, 'India', 'Laptop', 15000),  
('Stephen', 2019, 'India', 'TV', 20000),  
('Bob', 2017, 'US', 'Computer', 15000),  
('Bob', 2018, 'US', 'Computer', 10000),  
('Bob', 2019, 'US', 'TV', 20000),  
('Mandy', 2017, 'Canada', 'Mobile', 20000),  
('Mandy', 2018, 'Canada', 'Calculator', 1500),  
('Mandy', 2019, 'Canada', 'Mobile', 25000);
我们可以使用 SELECT 语句将记录验证到表中。它将给出如下输出:
MySQL LEAD and LAG Function
The以下语句查找每个员工的 销售和下一个销售详细信息:
SELECT Year, Product, Sale,   
LEAD(Sale,1) OVER (
PARTITION BY Year
ORDER BY Country) AS Next_Sale  
FROM sales_table;
此示例首先按年份将结果集划分为多个分区,然后使用"国家/地区"列对每个分区进行排序。最后,我们在每个分区上应用了LEAD()函数以获得下一个销售明细。以下输出对其进行了更清晰的说明:
MySQL LEAD和LAG Function
在在输出中,我们可以看到每个分区中的空值。当下一行越过分区边界时,每个分区的最后一行中的下一个值始终为NULL。

MySQL LAG函数

此函数使我们能够查看信息关于backword行或前几行,以获取/访问当前行中前一行的值。在同一结果集中计算当前行与上一行之间的差异是一种非常有用的方法。
以下是在MySQL中使用LAG函数的常规 语法:
LAG (expression, offset , default_value) OVER (
    PARTITION BY (expr)
    ORDER BY (expr [ASC|DESC])
)

参数说明

LAG函数语法包含以下参数。
参数 说明
expression 它是列名或任何内置函数。
offset 它包含当前行之前的行数。它应该是或任何正整数值。如果为,则该函数将评估当前行的结果。如果我们忽略,则该函数默认使用1、
default_value 当当前行中没有上一行时,它将返回一个值。如果我们忽略这一点,该函数将返回空值
其他参数(例如OVER,PARTITION BY,ORDER BY子句的含义)与LEAD函数相同。

MySQL LAG()函数示例

在这里,我们将了解LAG函数如何与MySQL表一起使用。我们可以使用上面名为 sales_table 的表进行演示。
以下语句查找每个员工的 销售和以前的销售明细:
SELECT Year, Product, Sale,   
LAG(Sale, 1, 0) OVER (
PARTITION BY Year
ORDER BY Country) AS Previous_Sale_LAG
FROM sales_table;
此示例首先将结果集按年份划分为多个分区,然后使用"国家/地区"列对每个分区进行排序。最后,我们在每个分区上应用了LAG()函数以获得以前的销售明细。执行以上语句后,我们可以看到以下输出:
MySQL LEAD和LAG函数
在输出中,我们可以在每个分区中看到0.00值。它指示表中将不存在的行的值。如果我们没有提供默认值,它将变为NULL。
注意: MySQL版本8.0中引入了LEAD()和LAG()函数。因此我们不能在以前的版本中使用它。它们始终与OVER()子句一起使用。如果我们没有使用此子句,它将引发一个错误。

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4