Menu
CoddyTech

Агрегатные функции

Часть раздела Основы путешествия по SQL на Coddy. Урок 68 из 72.

С OVER (ORDER BY ...) агрегатные функции, такие как AVG() или MAX(), вычисляются по строкам до текущей строки включительно, включая строки, значения в которых совпадают со значением в ORDER BY. Без ORDER BY внутри OVER они вычисляются по всем строкам, поэтому каждая строка получает одинаковое значение.
Например, мы могли бы вычислить максимальную выручку, полученную к концу каждого периода:

месяцвыручкарегион
440East
520East
660West
755West
861East
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1

Это вернёт:

месяцвыручкаmax_revenue
44040
52040
66060
75560
86161

Для месяцев 4 и 5 максимальная выручка составляет 40, для месяцев 6 и 7 — 60, а для месяца 8 — 61. Это происходит потому, что, когда запрос находит новую, более высокую выручку, он отбрасывает старую и использует наибольшую на данный момент.

Для функции AVG() это будет выглядеть так:

SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1
месяцвыручкаavg_revenue
44040
52030
66040
75543.75
86147.2

Мы также можем группировать вычисления по определённым категориям с помощью PARTITION BY. Например:

SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1

Дало бы нам:

месяцвыручкарегионmax_revenue
440East40
520East40
660West60
755West60
861East61

Теперь максимум рассчитывается отдельно для каждого региона. Для восточного и западного регионов независимо поддерживаются собственные текущие максимумы.

challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • books: book, page, words

Для каждой книги выведите название книги, общее количество страниц, количество слов на каждой странице и вычислите:

  1. Максимальное количество слов на любой странице этой книги
  2. Среднее количество слов на страницу для всей книги
  3. Разницу между количеством слов на текущей странице и средним количеством слов на страницу в книге

Выведите результаты в порядке книг и номеров страниц.

Верните следующие столбцы:

  • book
  • page
  • words
  • max_words_in_book
  • avg_words_per_page
  • diff_from_avg

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница SQL