Запитання на співбесіді SQL 7/30: Обчислення ковзаючого середнього

Обчислення ковзаючого середнього — це поширена задача SQL, особливо в сценаріях, що передбачають роботу з даними часових рядів, таких як відслідковування цін на акції, продажів або показників ефективності. У цьому дописі ми розглянемо, як обчислити ковзаюче середнє за допомогою SQL.

Розуміння задачі

Дано таблицю з даними за часом, потрібно обчислити ковзаюче середнє за останні 3 дні.

Приклад таблиці: Sales

pic

Найефективніший спосіб обчислення ковзаючого середнього в SQL — це використання віконних функцій.

pic

Дозвольте пояснити це більш детально:

  • PARTITION BY product: Забезпечує, щоб ковзаюче середнє обчислювалося окремо для кожного продукту.
  • ORDER BY date: Сортує рядки хронологічно для кожного продукту.
  • ROWS BETWEEN 2 PRECEDING AND CURRENT ROW: Визначає ковзаюче вікно, яке включає поточний рядок і два попередні (вікно за 3 дні).
  • AVG(sales): Обчислює середнє значення продажів у межах зазначеного вікна.
  • ROUND(..., 2): Округлює результат до двох знаків після коми для зручності читання, хоча це не обов’язково, але є гарною практикою для чистоти результатів.

Основні моменти для запам’ятовування

Коригування розміру вікна:

  • Змініть ROWS BETWEEN (для віконних функцій) або діапазон дат (для підзапитів), щоб змінити розмір ковзаючого вікна.

Обробка крайових випадків:

  • Для перших кількох рядків, де доступно менше ніж 3 рядки, ковзаюче середнє обчислюється з використанням доступних даних.

Розповсюджені варіанти цього запитання

Кумулятивне ковзаюче середнє:

  • Обчислює середнє значення для всіх рядків до поточного.
  • Замініть ROWS BETWEEN на ROWS UNBOUNDED PRECEDING.

Ковзаюча сума:

  • Замініть AVG(sales) на SUM(sales), щоб обчислити загальну суму продажів за ковзаюче вікно.

Не пропустіть наступне SQL запитання 8/30 завтра!

Перекладено з: SQL Interview Question 7/30: Calculating the Moving Average

Leave a Reply

Your email address will not be published. Required fields are marked *