Агрегатные функции
Часть раздела Основы путешествия по SQL на Coddy — урок 68 из 72.
Функции агрегации используются для расчёта AVG() или MAX() или любой другой функции агрегации вплоть до текущей строки.
Например, мы могли бы рассчитать максимальную выручку, полученную до каждого конечного периода:
| месяц | выручка | регион |
| 4 | 40 | Восток |
| 5 | 20 | Восток |
| 6 | 60 | Запад |
| 7 | 55 | Запад |
| 8 | 61 | Восток |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1Это вернёт:
| месяц | выручка | максимальная выручка |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
Для месяцев 4 и 5 максимальная выручка составляет 40, для месяцев 5 и 6 выручка составляет 60, а для месяца 8 — 61. Это потому, что когда оно находит новую большую выручку, оно отбрасывает старую и использует самую большую на данный момент.
Для функции AVG() это будет выглядеть так:
SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1| месяц | выручка | средняя выручка |
| 4 | 40 | 40 |
| 5 | 20 | 30 |
| 6 | 60 | 40 |
| 7 | 55 | 43.75 |
| 8 | 61 | 47.2 |
Мы также можем группировать наши вычисления по конкретным категориям с использованием PARTITION BY. Например:
SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1Это даст нам:
| month | revenue | region | max_revenue |
| 4 | 40 | Восток | 40 |
| 5 | 20 | Восток | 40 |
| 6 | 60 | Запад | 60 |
| 7 | 55 | Запад | 60 |
| 8 | 61 | Восток | 61 |
Теперь максимум рассчитывается отдельно для каждого региона. Регион Восток и регион Запад поддерживают свои собственные текущие максимумы независимо.
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>books</strong>:<strong>book</strong>,<strong>page</strong>,<strong>words</strong>
Для каждой книги выведите название книги, общее количество её страниц, количество слов на каждой странице и рассчитайте:
- Максимальное количество слов, найденное на любой странице этой книги
- Среднее количество слов на страницу для всей книги
- Разницу между количеством слов на текущей странице и средним количеством слов на страницу книги
Отобразите результаты, упорядоченные по книге и номеру страницы.
Верните следующие столбцы:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_from_avg
Шпаргалка
Оконные функции с агрегацией вычисляют значения по набору строк, связанных с текущей строкой. Используйте клаузу OVER с ORDER BY для накопительных вычислений:
SELECT column,
MAX(column) OVER (ORDER BY column ASC) as running_max,
AVG(column) OVER (ORDER BY column ASC) as running_avg
FROM tableИспользуйте PARTITION BY для группировки вычислений по категориям:
SELECT column, category,
MAX(column) OVER (PARTITION BY category ORDER BY column ASC) as max_per_category
FROM tableЭто вычисляет максимум отдельно для каждой категории, поддерживая независимые накопительные вычисления.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов9Несколько таблиц
Базовый JOIN, Часть 1Базовый JOIN, Часть 2Повторение - JOINСамосоединениеПовторение - СамосоединениеОбъединениеУпрощение запросов, ключевое слово WITHПовторение - Запросы WITHПовторение - Подрядчик по недвижимости12Оконные функции, часть 2
Функции RANK и DENSE_RANKПовторение - RANK и DENSE_RANKФункция NTILEАгрегатные функцииКритерии ROWS и RANGE