Уроки модуля (1/4)
Введение и предложение OVER
Введение и пункт OVER
В предыдущих уроках мы увидели, как использовать GROUP BY для агрегирования данных. Однако у GROUP BY есть огромное ограничение: он сворачивает строки. Если вы сгруппируете данные по городам, вы получите одну строку для каждого города и потеряете сведения об отдельных клиентах.
Именно здесь в игру вступают Оконные функции. Они позволяют выполнять совокупные вычисления (например, суммы или средние значения) с сохранением исходных строк.
Предложение OVER()
Волшебное ключевое слово — OVER(). Он сообщает базе данных, что агрегатную функцию (например, SUM, AVG, COUNT) следует рассматривать как оконную функцию, вычисляемую по всему набору результатов (глобальное «окно»), но применяемую и возвращаемую для каждой отдельной строки.
SELECT
order_id,
total_amount,
AVG(total_amount) OVER() AS global_average
FROM orders;В этом примере мы сохраняем каждый отдельный заказ, но в каждой строке также есть столбец global_average со средним значением всех заказов. Очень полезно, например, измерить, насколько заказ отклоняется от среднего!
В таблице «Продукты» выберите столбец «цена». Добавьте столбец с именем «global_max_price», содержащий максимальную цену, рассчитанную с помощью оконной функции для всей таблицы.
Показать подсказку
Используйте MAX(цена) в сочетании с OVER().
Решение доступно после 3 попыток
Извлеките «id», «цену» и добавьте общую среднюю цену («global_avg») из таблицы «products».
Показать подсказку
Просто добавьте AVG(цена) OVER().
Решение доступно после 3 попыток