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 ИЗ продажи;
Выход: