Найти в Дзене
ЦифроПроф

Расчёт кумулятивных значений

Оператор ORDER BY в выражении OVER позволяет не только сортировать значения. Если сочетать оператор с агрегирующими функциями, можно производить вычисления кумулятивно, то есть с накоплением. Задача 1 Напишите запрос к таблице tools_shop.orders, который выведет: SELECT created_at, total_amt, SUM(total_amt) OVER (ORDER BY created_at) FROM tools_shop.orders Задача 2 Напишите запрос к таблице tools_shop.orders, который выведет: SELECT user_id, created_at, total_amt, SUM(total_amt) OVER (PARTITION BY user_id ORDER BY created_at) FROM tools_shop.orders Задача 3 Напишите запрос к таблице tools_shop.orders, который выведет: SELECT CAST(DATE_TRUNC('month', created_at) AS date), total_amt, SUM(total_amt) OVER (ORDER BY CAST(DATE_TRUNC('month', created_at) AS date)) FROM tools_shop.orders
Фото из открытых источников
Фото из открытых источников

Оператор ORDER BY в выражении OVER позволяет не только сортировать значения. Если сочетать оператор с агрегирующими функциями, можно производить вычисления кумулятивно, то есть с накоплением.

Задача 1

Напишите запрос к таблице tools_shop.orders, который выведет:

  • дату и время заказа created_at;
  • сумму заказа total_amt;
  • сумму заказа с накоплением, отсортированную по возрастанию даты и времени заказа.

SELECT created_at, total_amt,

SUM(total_amt) OVER (ORDER BY created_at)

FROM tools_shop.orders

Задача 2

Напишите запрос к таблице tools_shop.orders, который выведет:

  • идентификатор пользователя user_id;
  • дату и время заказа created_at;
  • сумму заказа total_amt;
  • сумму заказа с накоплением для каждого пользователя, отсортированную по возрастанию даты и времени заказа.

SELECT user_id, created_at, total_amt,

SUM(total_amt) OVER (PARTITION BY user_id ORDER BY created_at)

FROM tools_shop.orders

Задача 3

Напишите запрос к таблице tools_shop.orders, который выведет:

  • месяц заказа в формате '2016-02-01', приведённый к типу date;
  • сумму заказа total_amt;
  • сумму заказа с накоплением, отсортированную по возрастанию месяца оформления заказа (здесь дата — дата и время, усечённые до месяца).

SELECT CAST(DATE_TRUNC('month', created_at) AS date), total_amt,

SUM(total_amt) OVER (ORDER BY CAST(DATE_TRUNC('month', created_at) AS date))

FROM tools_shop.orders