美文网首页
MySQL LAG() 函数

MySQL LAG() 函数

作者: KingWorld | 来源:发表于2022-06-09 17:31 被阅读0次

LAG()函数从同一结果集中的当前行访问上一行的数据。

LAG()函数是一个窗口函数,允许您回顾多行并从当前行访问行的数据。

以下说明了LAG()函数的语法:

LAG(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY expr,...
    ORDER BY expr [ASC|DESC],...
) 

expression

LAG()函数返回expression当前行之前的行的值,其值为offset 其分区或结果集中的行数。

offset

offset是从当前行返回的行数,以获取值。offset必须是零或文字正整数。如果offset为零,则LAG()函数计算expression当前行的值。如果未指定offset,则LAG()默认情况下函数使用一个。

default_value

如果没有前一行,则LAG()函数返回default_value。例如,如果offset为2,则第一行的返回值为default_value。如果省略default_value,则默认LAG()返回函数[NULL](https://www.begtut.com/mysql/mysql-null.html)

PARTITION BY 子句

PARTITION BY子句将结果集中的行划分LAG()为应用函数的分区。如果省略PARTITION BY子句,LAG()函数会将整个结果集视为单个分区。

ORDER BY 子句

ORDER BY子句指定在LAG()应用函数之前每个分区中的行的顺序。

LAG()函数可用于计算当前行和上一行之间的差异。


MySQL LAG() 函数示例

我们将使用ordersorderDetailsproductLines表从示例数据库的演示。

以下语句返回特定年份和上一年度中每个产品系列的订单值:

WITH productline_sales AS (
    SELECT productline,
           YEAR(orderDate) order_year,
           ROUND(SUM(quantityOrdered * priceEach),0) order_value
    FROM orders
    INNER JOIN orderdetails USING (orderNumber)
    INNER JOIN products USING (productCode)
    GROUP BY productline, order_year
)
SELECT
    productline, 
    order_year, 
    order_value,
    LAG(order_value, 1) OVER (
        PARTITION BY productLine
        ORDER BY order_year
    ) prev_year_order_value
FROM 
    productline_sales; 

这是输出:

+------------------+------------+-------------+-----------------------+
| productline      | order_year | order_value | prev_year_order_value |
+------------------+------------+-------------+-----------------------+
| Classic Cars     |       2013 |     1374832 |                  NULL |
| Classic Cars     |       2014 |     1763137 |               1374832 |
| Classic Cars     |       2015 |      715954 |               1763137 |
| Motorcycles      |       2013 |      348909 |                  NULL |
| Motorcycles      |       2014 |      527244 |                348909 |
| Motorcycles      |       2015 |      245273 |                527244 |
| Planes           |       2013 |      309784 |                  NULL |
| Planes           |       2014 |      471971 |                309784 |
| Planes           |       2015 |      172882 |                471971 |
| Ships            |       2013 |      222182 |                  NULL |
| Ships            |       2014 |      337326 |                222182 |
| Ships            |       2015 |      104490 |                337326 |
| Trains           |       2013 |       65822 |                  NULL |
| Trains           |       2014 |       96286 |                 65822 |
| Trains           |       2015 |       26425 |                 96286 |
| Trucks and Buses |       2013 |      376657 |                  NULL |
| Trucks and Buses |       2014 |      465390 |                376657 |
| Trucks and Buses |       2015 |      182066 |                465390 |
| Vintage Cars     |       2013 |      619161 |                  NULL |
| Vintage Cars     |       2014 |      854552 |                619161 |
| Vintage Cars     |       2015 |      323846 |                854552 |
+------------------+------------+-------------+-----------------------+
21 rows in set (0.04 sec)

在这个例子中:

  • 首先,我们使用公用表表达式来获取每年每个产品的订单价值。
  • 然后,我们使用产品线将产品划分为分区,按订单年度对每个分区进行分类,并将LAG()函数应用于每个已排序的分区以获取每个产品的上一年的订单值。

注意:我们使用[ROUND()](https://www.begtut.com/mysql/mysql-math-functions/mysql-round/)函数将订单值舍入到零小数位。

相关文章

  • MySQL LAG() 函数

    LAG()函数从同一结果集中的当前行访问上一行的数据。 LAG()函数是一个窗口函数[https://www.be...

  • MySQL lag和lead函数实现

    lag实现如下 其中targField是你想要在下一行呈现的字段,根据字段是字符还是数字,最后的select 应该...

  • 窗口函数示例2-lag:

    有关开窗函数的基本语法参照 参考地址 1.LAG & LEAD LAG(col,n,DEFAULT) 用于统计窗口...

  • MYSQL lag() 和lead()函数使用介绍

    LEAD()函数是一个窗口函数,允许您从当前行向前看多行数据。与LAG()函数类似,LEAD()函数对于计算同一结...

  • SAS Function:LAG 和 DIF

    今天介绍SAS中的两个函数:LAG 和 DIF,首先看SAS官方文档的解释:LAG,Returns values ...

  • spark

    lag,lead平移 scala加载xxx.scala文件 join 计算缺失值比例 自定义函数F.udf F函数...

  • Pandas实现Hive中的窗口函数

    1、Hive窗口函数 我们先来介绍一下Hive中几个常见的窗口函数,row_number(),lag()和lead...

  • SQLserver LEAD和LAG函数

    官方文档:LAG (Transact-SQL)[https://docs.microsoft.com/zh-cn/...

  • Hive 分析函数lead、lag实例应用

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

  • 2021-10-15 diff()、range()函数

    1.diff()函数 diff() 是R语言中的一个简单函数。该函数有三个基本参数:x, lag = 1 和 di...

网友评论

      本文标题:MySQL LAG() 函数

      本文链接:https://www.haomeiwen.com/subject/arvmmrtx.html