當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。