Menu
Coddy logo textTech

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

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

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

месяцвыручкарегион
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

Мы бы получили:

monthrevenueregionmax_revenue
440East40
520East40
660West60
755West60
861East61

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

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