Агрегатные функции
Часть раздела Основы путешествия по SQL на Coddy. Урок 68 из 72.
С OVER (ORDER BY ...) агрегатные функции, такие как AVG() или MAX(), вычисляются по строкам до текущей строки включительно, включая строки, значения в которых совпадают со значением в ORDER BY. Без ORDER BY внутри OVER они вычисляются по всем строкам, поэтому каждая строка получает одинаковое значение.
Например, мы могли бы вычислить максимальную выручку, полученную к концу каждого периода:
| месяц | выручка | регион |
| 4 | 40 | East |
| 5 | 20 | East |
| 6 | 60 | West |
| 7 | 55 | West |
| 8 | 61 | East |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1Это вернёт:
| месяц | выручка | max_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
Для месяцев 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 |
| 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Дало бы нам:
| месяц | выручка | регион | max_revenue |
| 4 | 40 | East | 40 |
| 5 | 20 | East | 40 |
| 6 | 60 | West | 60 |
| 7 | 55 | West | 60 |
| 8 | 61 | East | 61 |
Теперь максимум рассчитывается отдельно для каждого региона. Для восточного и западного регионов независимо поддерживаются собственные текущие максимумы.
Задание
ЛегкоДоступные таблицы и столбцы:
books:book,page,words
Для каждой книги выведите название книги, общее количество страниц, количество слов на каждой странице и вычислите:
- Максимальное количество слов на любой странице этой книги
- Среднее количество слов на страницу для всей книги
- Разницу между количеством слов на текущей странице и средним количеством слов на страницу в книге
Выведите результаты в порядке книг и номеров страниц.
Верните следующие столбцы:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_from_avg
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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Потренируйтесь самостоятельно: Песочница SQL