>_ IzzyLab

Практическое задание

SQLite: нарастающий итог

средне

В базе /root/shop.db есть таблица sales(day INTEGER, amount INTEGER) — выручка по дням. Составь запрос с оконной функцией SUM(...) OVER (ORDER BY ...), который для каждого дня выдаёт нарастающий итог (сумму выручки с первого дня по текущий), и запиши результат в /root/running.txt в формате day|amount|итог.

Что потренируешь:
  • оконные функции
  • нарастающий итог
  • sum over
  • order by
  • sqlite3

Разбор темы

Нарастающий итог (running total) — это сумма всех значений от начала набора до текущей строки включительно. Обычная агрегатная SUM(...) с GROUP BY схлопнула бы всё в одно число, поэтому применяется оконная форма SUM(...) OVER (...), которая считает сумму, но оставляет строки на месте. Ключ — ORDER BY внутри OVER (...): при его наличии SQLite по умолчанию берёт рамку окна «от начала до текущей строки», что и даёт накопление. Колонки в выводе sqlite3 разделяются |.

Что проверяется

  1. итог первого дня равен его выручке
  2. итог последнего дня равен сумме всех дней

Как это выглядит