Lag Postgresql

Мы применим к таблице функцию запаздывания База данных

Функция Postgresql Lag () используется для доступа к строке в таблице, которая находится перед текущей строкой таблицы. Как видно из названия, он отстает от текущей строки и принимает запись таблицы. В PostgreSQL функция задержки важна, так как она сравнивает предыдущие строки с текущей строкой.

Эта функция подходит для получения информации о данных, которые вы ввели ранее, но присутствуют в текущей строке. Тогда вы сможете получить доступ к данным прошлого. Откройте psql и, указав пароль, теперь можете применять все команды в оболочке psql.

Синтаксис

LAG(expression [ offset [value]])

OVER (

[PARTITION BY expression, … ]

ORDER BY expression [ASC | DESC], …

)

Смещение — это целое число, заданное в запросе, которое показывает количество строк, присутствующих над текущей строкой. Это может быть подзапрос или выражение.Реклама закончится через 11

Функция задержки применяется к разделу значений, который в основном создается с помощью предложения раздела. В то же время предложение order by используется для упорядочивания строк в указанном порядке.

Мы описали здесь две основные особенности функции задержки:

  • Задержка раздела по умолчанию
  • Функция лага в разделах.

lag default partition

У нас есть таблица с названием «выставочный зал», содержащая подробную информацию об автомобилях. Таблица создается запросом «CREATE TABLE» в psql и добавлением данных с помощью оператора «INSERT».

>> select * from showroom;

Мы применим к таблице функцию запаздывания

Мы применим к таблице функцию запаздывания. Функция lag содержит два или более оператора select. Поскольку мы должны выбрать значение перед текущей строкой, текущая строка выбирается на первом шаге, а затем строка перед ней.

Пример 1

В этом примере мы выберем столбец из таблицы и вычислим сумму из столбца цен. Второй оператор выбора будет использовать функцию задержки. Оба этих оператора используют предложение «упорядочить по» с «группировать по» в агрегированной функции select. Поскольку ни один год не похож на другой, будут отображаться все строки. Группировки не будет. Теперь применяем команду к таблице:

>>  with cte AS ( SELECT year, SUM (price) price FROM showroom GROUP BY year ORDER BY year ) SELECT year, price, LAG (price, 1) OVER (ORDER BY year) previous_year_discount from cte;

Чтобы напечатать значение строки над текущей строкой, мы сначала получаем

Чтобы напечатать значение строки над текущей строкой, мы сначала получаем доступ к текущей строке с помощью оператора select и вычислили функцию суммы. Полученное значение сохраняется в «cte» для дальнейшего использования в последнем запросе. Полученное значение будет отсортировано и сгруппировано по столбцу «год».

При переходе ко второму оператору select из таблицы выбираются те же столбцы в «cte». Создается дополнительный столбец с именем «предыдущая_годовая скидка», имеющий отставание на 1 строку. И строки результирующего столбца должны быть упорядочены по столбцу года.

При переходе ко второму оператору select из таблицы выбираются

Из полученной таблицы видно, что первая строка в новом столбце пуста. Потому что цена смещается на следующую строку с самого начала, делая первую строку NULL.

Пример 2

Другой пример; здесь мы используем три оператора выбора. «Cte» и «cye» используются для хранения значений, полученных из двух запросов с использованием оператора «select», а их результирующие значения будут использоваться в третьем операторе выбора. Вывод «cte» действует как вывод «cte2». Точно так же «cte2» будет входом для третьего оператора выбора. Все значения отображаются в итоговой таблице вместе, потому что один результат является функцией запаздывания, тогда как второй результирующий столбец показывает разницу между двумя значениями запаздывания.

При переходе к первому «cte» вычисляется та же функция, что и в предыдущем примере. Сумма рассчитывается из столбца «цена».

>> With cte AS ( SELECT year, SUM (price) price FROM showroom GROUP BY year ORDER BY year ),

Вторая команда «cte2» похожа на вторую команду выбора

Вторая команда «cte2» похожа на вторую команду выбора, потому что мы знаем, что функция задержки применяется к сумме столбца «цена». Столбец этой суммы «previous_year_Discount» сохраняется как в cte.

>> cte2 AS ( SELECT year, price, LAG (price, 1) OVER (ORDER BY year) previous_year_discount from cte)

Третья инструкция «select» возьмет запаздывающую сумму

Третья инструкция «select» возьмет запаздывающую сумму цен и вычислит их разницу. Например, цена в третьей строке вычитает значение из второй строки. В то же время первая строка имеет значение NULL из-за функции задержки.

>> SELECT year, price, previous_year_Discount, (Previous_year_Discount – price) Difference FROM cte;

Четвертый столбец назван разницей, потому что он использует

Четвертый столбец назван разницей, потому что он использует оператор минус для вычитания значений в третьем столбце.

Для каждой строки значение из 3-го столбца вычитается из предыдущей строки

Для каждой строки значение из 3-го столбца вычитается из предыдущей строки. Например (3–2), (4–3) и так далее. И вычитаемое значение записывается перед первым значением (вычитается из следующего значения). Но в 6-й, последней строке в столбце «Разница» написан ответ, который получается вычитанием 1-й строки из 2-й строки, значения 2021 года.

Пример 3

Рассмотрим другой пример, в котором та же концепция применяется к таблице. Но отставание 2 вместо единицы. Единственный оператор выбора отображает цены, а не СУММ или любую другую агрегатную функцию.

>> SELECT year, price, LAG (price, 2) OVER (ORDER BY year) Discount FROM showroom;

Единственный оператор выбора отображает цены

Полученное значение показывает, что цена в столбце скидки сдвинута на две строки вниз. Это означает, что мы получили доступ к строкам перед текущей строкой таблицы.

Полученное значение показывает, что цена в столбце скидки сдвинута на две строки вниз

Функция LAg в разделах

Через pgAdmin

В pgAdmin после ввода пароля вы можете получить доступ к базе данных и всему содержимому, присутствующему в ней. Перейдите к инструменту запроса таблиц. Теперь создайте новые имена таблиц «team_members».

>> CREATE TABLE team_members ( name VARCHAR(100), id INT, year integer, salary integer);

В pgAdmin после ввода пароля вы можете получить доступ к базе данных и всему содержимому

После создания таблицы добавьте значения в таблицу.

>> INSERT INTO team_members( name, id, year, salary)  Values (‘salar’, 1, 2018, 180000);

INSERT INTO team_members

После того, как значения вставлены, примените запрос.

Функция LAG () в этом типе сравнивает годовую зарплату с прошлым годом каждой группы.

>> select year, salary, id, LAG(salary, 1) over partition by id ( order by year ) Discount FROM team_members;

В этом примере идентификаторы сгруппированы вместе

В этом примере идентификаторы сгруппированы вместе. Раздел распределяет строки по группе, так как вы можете видеть, что все одинаковые идентификаторы присутствуют вместе. А в столбце скидок показано сравнение зарплаты в одной строке со второй строкой с лагом 1.

А в столбце скидок показано сравнение зарплаты в одной

Заключение

«Функция задержки» используется для извлечения записи, которую вы ввели перед текущей выбранной строкой. Здесь с примерами обсуждаются две основные категории функции задержки. Select, order by используются в дополнение к разделу «partition by clause». Эту функцию в PostgreSQL можно применять внутри таблицы, а затем применять к ним различные операции.

Читайте также:  Как использовать функцию mysqli_real_escape_string?
Оцените статью
bestprogrammer.ru
Добавить комментарий