Партицирование и оконные функции в SQL

Партицирование и оконные функции в SQL

Партицирование и оконные функции — это функциональные возможности SQL, предоставляющие более гибкие и мощные средства для анализа данных внутри запросов. Давайте рассмотрим каждую из этих концепций подробнее.

Партицирование в SQL:

Партицирование позволяет разделять результаты запроса на группы для агрегации и анализа. Оно используется совместно с агрегатными функциями, такими как SUM, AVG, COUNT, и другими. Ключевыми словами для партицирования являются PARTITION BY.

Пример использования партицирования с агрегатной функцией SUM:

SELECT
  department,
  employee_name,
  salary,
  SUM(salary) OVER (PARTITION BY department) AS department_total_salary
FROM
  employees;

В этом запросе данные партицированы (разделены) по группам (отделам) (PARTITION BY department), и для каждой группы (отдела) подсчитывается сумма зарплат.

Оконные функции в SQL:

Оконные функции также предоставляют возможность выполнять вычисления на подмножестве данных, но они делают это без изменения числа строк в результате запроса. Оконные функции используют ключевые слова OVER с определенным окном.

Пример использования оконной функции ROW_NUMBER:

SELECT
  employee_name,
  salary,
  ROW_NUMBER() OVER (ORDER BY salary DESC) AS salary_rank -- в данном случае окном, определяемым через оператор over () являются все строки запроса
FROM
  employees;

В этом запросе ROW_NUMBER присваивает каждой строке ранг в зависимости от зарплаты, но не изменяет количество строк в результате.

Сочетание партицирования и оконных функций:

SELECT
  department,
  employee_name,
  salary,
  AVG(salary) OVER (PARTITION BY department) AS avg_department_salary,
  RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM
  employees;

Этот запрос демонстрирует, как можно использовать и партицирование (PARTITION BY department) и оконные функции (OVER) в одном запросе. Для каждого отдела вычисляется средняя зарплата, и сотрудники ранжируются по убыванию зарплаты.

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

Источник

Shopping Cart