Перейти до основного вмісту
Модуль 13 · Урок 1 із 449/57 у курсі~15 min
Модульні уроки (1/4)

Вступ і речення OVER

Вступ і речення OVER

У попередніх уроках ми бачили, як використовувати GROUP BY для агрегування даних. Однак GROUP BY має величезне обмеження: він згортає рядки. Якщо ви згрупуєте за містом, ви отримаєте один рядок для кожного міста та втратите інформацію про окремих клієнтів.

Ось тут і вступають у гру Функції вікон. Вони дозволяють виконувати сукупні обчислення (наприклад, суми чи середні значення) зберігаючи вихідні рядки.

Речення OVER().

Магічне ключове слово OVER(). Він повідомляє базі даних, що агрегатну функцію (наприклад, SUM, AVG, COUNT) слід розглядати як віконну функцію, обчислену для всього набору результатів (глобальне «вікно»), але застосовувати та повертати до кожного окремого рядка.

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

У цьому прикладі ми зберігаємо кожне окреме замовлення, але кожен рядок також має стовпець global_average із середнім значенням усіх_ замовлень. Дуже корисно, наприклад, щоб виміряти, наскільки замовлення відхиляється від середнього!

вправи#sql.m13.l1.e1
Спроби: 0Завантаження…

Виберіть стовпець "ціна" в таблиці "продукти". Додайте стовпець під назвою "global_max_price", який містить максимальну ціну, обчислену за допомогою віконної функції для всієї таблиці.

Завантаження редактора…
Показати підказку

Використовуйте MAX(ціна) у поєднанні з OVER().

Рішення доступне після 3 спроб

вправи#sql.m13.l1.e2
Спроби: 0Завантаження…

Витягніть «id», «price» і додайте загальну середню ціну («global_avg») із таблиці «products».

Завантаження редактора…
Показати підказку

Просто додайте AVG(price) OVER().

Рішення доступне після 3 спроб