Ведущая функция SQL Server
Ведущая функция в SQL Server — это аналитическая функция, позволяющая получать доступ к данным из следующей строки в том же результирующем наборе без самообъединения.
Функция позволяет получить доступ к строке с заданным смещением, предшествующей текущей строке. Например, с помощью функции опережения можно найти строку сразу после текущей строки, 10-ю строку от текущей строки и т. д.
Эта функция побуждает разработчиков баз данных выполнять сравнение строк без сложных задач, таких как объединение, использование представлений и т. д.
Синтаксис функции
Ниже показан синтаксис функции lead() в SQL Server:
LEAD (скалярное_выражение [, смещение], [по умолчанию])
OVER ( [ раздел_по_клаузе ] порядок_по_клаузе )
Следующий список — это поддерживаемые аргументы и их функциональные возможности:
- скалярное_выражение — этот аргумент обозначает возвращаемое значение на основе определенного смещения. Это может быть выражение любого типа, которое возвращает одно значение. Однако значение scalar_expression не может быть другой аналитической/оконной функцией.
- смещение — это устанавливает, сколько строк из текущей позиции строки извлекается значение. По умолчанию функция сразу извлечет строку прилагательную к текущей строке. Точно так же значение параметра offset не может быть аналитической функцией или отрицательным целым числом.
- default — этот параметр устанавливает значение по умолчанию, если предоставленное значение смещения выходит за рамки целевого раздела. По умолчанию функция возвращает NULL.
- PARTITION BY — предложение partition_by определяет правила, которые делят результирующий набор на различные разделы. Затем функция применяется к каждому результирующему разделу.
- ORDER BY — определяет логический порядок, в котором применяются строки в каждом разделе.
Функция возвращает тип данных, определенный в scalar_expression. Если возвращаемое значение равно NULL, функция возвращает NULL.
Образец данных
Давайте воспользуемся некоторыми примерами баз данных, чтобы лучше всего проиллюстрировать, как использовать функцию опережения. Сначала используйте запросы, как показано ниже:
УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ инвентарь;
СОЗДАТЬ БАЗУ ДАННЫХ инвентаризации;
ИСПОЛЬЗОВАТЬ инвентарь;
УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ продукты;
СОЗДАТЬ ТАБЛИЦУ продуктов (
id int identity первичный ключ не нулевой,
имя_продукта varchar(100),
производитель varchar(50),
количество int не равно нулю,
цена по умолчанию 0,
бит в наличии
);
вставить в товары (название_продукта, производитель, количество, цена, наличие на складе)
значения («Apple iPad Air», «Apple», 100, 569,99, 1),
(«Samsung Galaxy Z Flip 4», «Samsung», 302, 1569.00, 1),
('Sony Playstation 5', 'Sony', 500, 499,99, 1),
(«Samsung Galaxy Watch-5 Pro», «Samsung», 600, 209/0,99, 1),
(«Apple Watch Series 6», «Apple», 459, 379,90, 1),
(«Apple AirPods Pro», «Apple», 200, 199,99, 1),
(«55-дюймовый класс S95B OLED 4K Smart TV», «Samsung», 900, 1999,90, 1),
(«Изогнутый игровой экран Odyssey Ark Quantum Mini-LED», «Samsung», 50, 2999.90, 1);
Результирующая таблица выглядит так:
Пример 1. Использование функции Lead() SQL Server для набора результатов
В приведенном ниже примере используется функция lead() для возврата цены следующего продукта.
Выбратьнаименование товара,
производитель,
количество,
цена,
свинец (цена,
1) более (
заказ по количеству)
из
товары;
Результирующая таблица:
Поскольку в последнем столбце нет строки, функция возвращает NULL.
Пример 2. Использование функции SQL Server lead() для набора разделов
Мы также можем получить следующий продукт в данном разделе. Например, мы можем разбить приведенные выше данные на основе производителя и применить функцию lead() в каждом разделе.
Пример иллюстрации показан ниже:
Выбратьнаименование товара,
производитель,
количество,
цена,
свинец (цена,
1) более (
раздел по производителю
заказ по количеству)
из
товары;
Приведенный выше запрос должен разделить строки на основе производителя и получить следующую цену для значений в каждом разделе.
В данном случае имеется три раздела.
Вывод
В этом посте вы разобрались со строительными блоками функции lead() в SQL Server. Вы также узнали, как использовать функцию lead() для набора результатов и разделов.