Sobes.tech
Назад к вопросам
Junior — Middle
84

Можешь назвать основные аналитические функции, используемые в SQL для анализа данных?

Компании, где спрашивали
ТранснефтьТранснефть

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Нужно показать, что аналитические функции в SQL работают по окну данных и позволяют считать метрики без свёртки строк. Обычно ждут знание базовых функций для ранжирования, накопительных итогов, сравнения строк между собой и доступа к соседним значениям. Также важно понимать, когда использовать OVER(), PARTITION BY и ORDER BY.

Определение:

Аналитические функции в SQL — это функции, которые вычисляют значение для каждой строки на основе набора строк, называемого окном. В отличие от агрегатных функций, они не уменьшают количество строк в результате. Они полезны для ранжирования, подсчёта накопительных итогов, поиска предыдущего/следующего значения и анализа распределения данных.

Пример использования:

SELECT
    user_id,
    order_date,
    amount,
    ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date) AS rn,
    SUM(amount) OVER (PARTITION BY user_id ORDER BY order_date) AS running_total,
    LAG(amount) OVER (PARTITION BY user_id ORDER BY order_date) AS prev_amount
FROM orders;

В этом примере:

  • ROW_NUMBER() нумерует заказы каждого пользователя по дате.
  • SUM(...) OVER(...) считает накопительную сумму по пользователю.
  • LAG(...) показывает сумму предыдущего заказа.

Пояснение кода:

Код показывает типичный набор аналитических функций для анализа последовательности событий. Сначала строки группируются по пользователю через PARTITION BY user_id. Затем ORDER BY order_date задаёт порядок внутри каждой группы.
ROW_NUMBER() выдаёт порядковый номер строки в окне. SUM(amount) OVER (...) считает накопительный итог от первой строки окна до текущей. LAG(amount) берёт значение из предыдущей строки в том же окне, что удобно для сравнения с прошлым периодом.

Ключевые моменты:

  • Основные аналитические функции: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER, AVG OVER, MIN OVER, MAX OVER, NTILE.
  • OVER() превращает обычную агрегатную логику в построчный анализ.
  • PARTITION BY делит данные на независимые группы.
  • ORDER BY внутри окна задаёт порядок вычислений.
  • Аналитические функции не схлопывают строки, в отличие от GROUP BY.
  • Особенно часто используются для рейтингов, временных рядов, накопительных итогов и сравнений с предыдущими/следующими значениями.