Оконные функции с коррелированными CTE
Оконные функции и коррелированные CTE (Common Table Expressions) часто используются вместе в SQL для выполнения сложного анализа данных. Оконные функции позволяют выполнять вычисления по окнам данных, а коррелированные CTE позволяют использовать промежуточные результаты в основных запросах, создавая более гибкие и мощные запросы.
Основные понятия
Оконные функции: Оконные функции выполняют вычисления по набору строк, который определяется оконной рамкой (window frame). Эти функции могут быть использованы для агрегации, ранжирования и выполнения других аналитических задач.
Коррелированные CTE: Коррелированные CTE используют значения из основного запроса для вычисления промежуточных результатов. Они могут быть использованы для создания промежуточных наборов данных, которые зависят от значений в основном запросе.
Синтаксис оконных функций
Оконные функции используют оконные функции, такие как ROW_NUMBER()
, RANK()
, DENSE_RANK()
, SUM()
, AVG()
, и другие, в сочетании с ключевыми словами OVER
и PARTITION BY
:
Примеры использования оконных функций с коррелированными CTE
Пример 1: Ранжирование сотрудников по зарплате в каждом департаменте
Создание коррелированного CTE для вычисления ранга сотрудников по зарплате и использование оконной функции для подсчета общего количества сотрудников в каждом департаменте.
В этом примере:
RankedEmployees
вычисляет ранг сотрудников в каждом департаменте по зарплате.Основной запрос использует оконную функцию
COUNT(*)
для подсчета общего количества сотрудников в каждом департаменте и фильтрует топ-5 сотрудников по зарплате.
Пример 2: Вычисление скользящего среднего
Использование коррелированного CTE для создания промежуточного набора данных, а затем применение оконной функции для вычисления скользящего среднего по продажам.
В этом примере:
SalesData
создает номер строки для каждой продажи в порядке даты для каждого продавца.Основной запрос использует оконную функцию
AVG()
для вычисления скользящего среднего по продажам за последние 3 месяца (2 предыдущих месяца и текущий месяц).
Пример 3: Определение роста продаж по сравнению с предыдущим периодом
Создание коррелированного CTE для вычисления общих продаж за каждый месяц и использование оконной функции для вычисления роста продаж по сравнению с предыдущим месяцем.
В этом примере:
MonthlySales
агрегирует продажи по месяцам и продавцам.SalesGrowth
вычисляет продажи в предыдущем месяце с помощью оконной функцииLAG()
.Основной запрос вычисляет рост продаж по сравнению с предыдущим месяцем, используя разность между текущими продажами и предыдущими.
Заключение
Оконные функции и коррелированные CTE предоставляют мощные средства для выполнения сложного анализа данных. Оконные функции позволяют проводить вычисления по окнам данных, а коррелированные CTE помогают создавать промежуточные наборы данных, которые могут использоваться в основном запросе. Комбинирование этих инструментов позволяет решать сложные аналитические задачи и упрощать обработку данных.
Last updated