← К оглавлению занятия

📝 Задания

⚡ Кратко: задания

  1. Написать запрос, который для каждой строки показывает общее число строк.
  2. Добавить PARTITION BY и посчитать строки в каждой группе.
  3. Сравнить результат с аналогичным GROUP BY.
1

Задание 1. Общее окно

Дана таблица orders с полями order_id, customer_id, order_date, amount. Напишите запрос, который выводит все заказы и общее количество заказов в таблице в отдельном столбце. Используйте оконную функцию без PARTITION BY.

2

Задание 2. Окно по клиенту

Измените запрос из задания 1 так, чтобы для каждого заказа показывалось количество заказов, сделанных тем же клиентом. Используйте PARTITION BY customer_id.

3

Задание 3. Сравнение с GROUP BY

Напишите эквивалентный запрос с GROUP BY customer_id, который возвращает количество заказов по каждому клиенту. Сравните результат с запросом из задания 2: чем отличается число строк и набор столбцов?

4

Задание 4. Порядок в окне

Для таблицы orders напишите запрос, который для каждого заказа клиента вычисляет накопительную сумму (running total) сумм заказов по возрастанию даты заказа. Используйте SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date).

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Чем оконная функция отличается от GROUP BY?

Вопрос 2

Для чего нужен OVER()?

Вопрос 3

Что делает SELECT?

Вопрос 4

Почему в SQL важен явный список столбцов?

Вопрос 5

Как лучше форматировать сложный SQL-запрос?

Вопрос 6

Что означает NULL?

Вопрос 7

Почему запросы стоит проверять на маленькой выборке?