PostgreSQL - функция LAG

Опубликовано: 30 Марта, 2022

В PostgreSQL, функция LAG () используется для получения доступа к строке , которая приходит в точности до текущей строки в определенном физическом смещении. LAG () пригодится при сравнении значений текущей строки с предыдущей строкой.

Ниже показан синтаксис функции LAG ():

 Синтаксис:
LAG (выражение [, смещение [, значение по умолчанию]]) 
НАД (
    [РАЗДЕЛЕНИЕ ПО_выражению_раздела, ...]
    ORDER BY sort_expression [ASC | DESC], ...
)

Давайте проанализируем приведенный выше синтаксис:

  • Выражение используется , чтобы установить Comparision основу для Comparision текущих и предыдущих строк точно в заданном смещении. Это может быть любое из следующих значений: столбец, выражение или подзапрос.
  • Смещения представляет собой положительное целое число, которое используется для набора в запросе число строк, перед текущей строкой. Смещение может быть выражение, вложенный запрос, или столбец. Если он не указан, по умолчанию используется 1.
  • Функция LAG () вернет default_value. когда смещение выходит за рамки раздела.
  • Функция LAG () применяется к разделам, созданным с помощью предложения PARTITION BY. Если разделение не указано, функция обрабатывает весь набор результатов как один раздел.
  • Предложение ORDER BY устанавливает порядок строк в каждом разделе, к которому применяется функция LAG ().

Пример 1:

Создадим новую таблицу для демонстрации под названием продажи :

 СОЗДАТЬ ТАБЛИЦЫ продаж (
    год МАЛЕНЬКАЯ ПРОВЕРКА (год> 0),
    group_id INT NOT NULL,
    сумма DECIMAL (10, 2) NOT NULL,
    ПЕРВИЧНЫЙ КЛЮЧ (год, group_id)
);

Добавьте к нему данные:

 ВСТАВИТЬ В 
    продажи (год, group_id, сумма) 
ЦЕННОСТИ
    (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);

Здесь функция LAG () для возврата суммы продаж текущего и предыдущего года:

 С cte AS (
    ВЫБРАТЬ 
        год, 
        SUM (сумма) сумма
    ОТ ПРОДАЖ
    ГРУППА ПО ГОДУ
) 
ВЫБРАТЬ
    год, 
    количество,
    LAG (количество; 1) НАБЛЮДЕНИЕ (
        ЗАКАЗАТЬ ПО годам
    ) last_year_sales
ИЗ
    cte;

Выход:

Пример 2:

В этом примере функция LAG () используется для сравнения продаж текущего года с продажами предыдущего года для каждой группы продуктов:

 ВЫБРАТЬ
    год, 
    количество,
    group_id,
    LAG (количество; 1) НАБЛЮДЕНИЕ (
        РАЗДЕЛЕНИЕ ПО group_id
        ЗАКАЗАТЬ ПО годам
    ) last_year_sales
ИЗ
    продажи;

Выход: