Разбиение данных на квантили с NTILE()

Функция NTILE() в SQL используется для разбиения набора данных на определенное количество равных частей или "квантилей". Это может быть полезно для распределения данных по определенным группам, чтобы можно было сравнить значения в пределах этих групп.

Принцип работы функции NTILE()

  • Количество квантилей: Функция разбивает набор данных на заданное количество квантилей.

  • Порядок: Строки упорядочиваются по заданному критерию перед разбиением на квантильные группы.

  • Распределение: Если количество строк не делится нацело на количество квантилей, то некоторые квантильные группы могут содержать на одну строку больше, чем другие.

Синтаксис функции NTILE()

NTILE(number_of_tiles) OVER (
    PARTITION BY partition_column
    ORDER BY order_column
)
  • number_of_tiles: Количество квантилей, на которые нужно разбить данные.

  • PARTITION BY partition_column: (Опционально) Разделяет данные на группы. Если не указано, функция применяется ко всему набору данных.

  • ORDER BY order_column: Определяет порядок, в котором будут распределены строки по квантильным группам.

Примеры использования функции NTILE()

Пример 1: Разбиение сотрудников на 4 квартиля по зарплате

Рассмотрим таблицу employees с полями employee_id, department, и salary. Мы хотим разделить сотрудников на 4 квартиля по их зарплате.

SELECT employee_id, department, salary,
       NTILE(4) OVER (PARTITION BY department ORDER BY salary) AS quartile
FROM employees;
  • PARTITION BY department: Делит данные на группы по отделам.

  • ORDER BY salary: Упорядочивает сотрудников по зарплате.

  • NTILE(4): Разделяет сотрудников на 4 квартиля.

Результат: Сотрудники в каждом отделе будут разбиты на 4 группы по зарплате, каждая из которых содержит примерно равное количество сотрудников.

Пример 2: Разбиение продаж на 10 децилей по сумме продаж

Рассмотрим таблицу sales с полями sale_id, quarter, и amount. Мы хотим разбить продажи на 10 децилей по сумме продаж.

SELECT sale_id, quarter, amount,
       NTILE(10) OVER (PARTITION BY quarter ORDER BY amount DESC) AS decile
FROM sales;
  • PARTITION BY quarter: Делит данные на группы по кварталам.

  • ORDER BY amount DESC: Упорядочивает продажи по сумме в порядке убывания.

  • NTILE(10): Разделяет данные на 10 децилей.

Результат: Продажи в каждом квартале будут разбиты на 10 групп по сумме продаж, где каждая группа представляет собой дециль.

Пример 3: Разбиение на 100 квантилей для анализа распределения значений

Рассмотрим таблицу data с полями id и value. Мы хотим разделить данные на 100 квантилей для детального анализа распределения значений.

SELECT id, value,
       NTILE(100) OVER (ORDER BY value) AS quantile
FROM data;
  • ORDER BY value: Упорядочивает строки по значению.

  • NTILE(100): Разделяет данные на 100 квантилей.

Результат: Данные будут разбиты на 100 квантилей по значению, что позволяет анализировать распределение значений более детально.

Заключение

Функция NTILE() полезна для разбиения набора данных на равные части, что позволяет проводить детализированный анализ распределения данных. Это может быть применимо в различных ситуациях, таких как создание рейтингов, анализ распределения значений или сравнение групп.

Last updated