Загрузка данных



3.3. Задание 3: Выручка бариста за неделю

Цель: подсчитать суммарную выручку по каждому бариста за последние 7 дней.

SQL-запрос:

```sql
SELECT
    b.id,
    b.full_name,
    SUM(o.total_amount) AS weekly_revenue
FROM orders o
JOIN baristas b ON o.barista_id = b.id
WHERE o.order_time >= NOW() - INTERVAL '7 days'
GROUP BY b.id, b.full_name
ORDER BY weekly_revenue DESC;
```

Пояснение логики: JOIN соединяет заказы с бариста. WHERE фильтрует заказы за 7 дней. GROUP BY группирует по бариста. Агрегатная функция SUM() считает общую выручку. ORDER BY DESC сортирует по убыванию.

Результат: [скриншот]

Проверка: выводится список бариста с суммой их заказов за неделю.

---

3.4. Задание 4: Топ-5 популярных позиций

Цель: определить 5 самых заказываемых позиций меню.

SQL-запрос:

```sql
SELECT
    mi.id,
    mi.name,
    SUM(od.quantity) AS total_ordered
FROM order_details od
JOIN menu_items mi ON od.menu_item_id = mi.id
GROUP BY mi.id, mi.name
ORDER BY total_ordered DESC
LIMIT 5;
```

Пояснение логики: JOIN соединяет состав заказов с меню. GROUP BY группирует по позициям. SUM() суммирует проданное количество. ORDER BY DESC и LIMIT 5 оставляют только топ-5.

Результат: [скриншот]

Проверка: выводится ровно 5 строк, отсортированных по убыванию.

---

3.5. Задание 5: Снятие позиции с продажи

Цель: пометить «Чизкейк» как недоступный для заказа.

SQL-запрос:

```sql
UPDATE menu_items
SET is_available = FALSE
WHERE name = 'Чизкейк';
```

Пояснение логики: оператор UPDATE изменяет поле is_available. WHERE ограничивает изменение только позицией с указанным названием.

Результат: [скриншот]

Проверка: поле is_available для «Чизкейк» изменилось с true на false.