当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


PostgreSQL LEAD用法及代码示例


在PostgreSQL中,LEAD()函数用于以特定的物理偏移量访问当前行之后的行。PostgreSQL LEAD()函数提供对以指定物理偏移量访问当前行之后的行的访问。这意味着从当前行开始,LEAD()函数可以访问下一行,下一行之后的行等等的数据。 LEAD()函数对于将当前行的值与当前行之后的行的值进行比较非常有用。

下面说明了LEAD()函数的语法:

用法:
LEAD(expression [, offset [, default_value]]) 
OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

让我们分析以上语法:

  • 这个表达根据与当前行的指定偏移量针对下一行进行评估。的表达可以是必须计算为单个值的列,表达式,子查询。
  • 偏移量是一个正整数,它指定从当前行转发访问的行数。偏移量可以是表达式,子查询或列。偏移量默认为1。
  • PARTITION BY子句将行划分为应用了LEAD()函数的分区。默认情况下,如果省略PARTITION BY子句,则整个结果集是单个分区。
  • 这个排序子句指定每个分区中行的排序顺序LEAD()函数已应用。

范例1:

让我们为演示建立一个新表,名称为sales:



CREATE TABLE sales(
    year SMALLINT CHECK(year > 0),
    group_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY(year, group_id)
);

现在向其中插入一些数据:

INSERT INTO 
    sales(year, group_id, amount) 
VALUES
    (2018, 1, 1474),
    (2018, 2, 1787),
    (2018, 3, 1760),
    (2019, 1, 1915),
    (2019, 2, 1911),
    (2019, 3, 1118),
    (2020, 1, 1646),
    (2020, 2, 1975),
    (2020, 3, 1516);

以下查询使用LEAD()函数返回当年和下一年的销售额:

WITH cte AS (
    SELECT 
        year, 
        SUM(amount) amount
    FROM sales
    GROUP BY year
    ORDER BY year
) 
SELECT
    year, 
    amount,
    LEAD(amount, 1) OVER (
        ORDER BY year
    ) next_year_sales
FROM
    cte;

输出:

范例2:

以下语句使用LEAD()函数将每个产品组的当年销售额与下一年的销售额进行比较:

SELECT
    year, 
    amount,
    group_id,
    LEAD(amount, 1) OVER (
        PARTITION BY group_id
        ORDER BY year
    ) next_year_sales
FROM
    sales;

输出:

相关用法


注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – LEAD Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。