Таблица Customers содержит информацию о покупателях интернет-магазина, таблица Orders - сведения о заказах, а таблица OrderItems - позиции в заказах. Данные в таблице Orders имеют древовидную структуру.
Записи, у которых поле group_name не равно null, предназначены для группировки заказов по категориям.
Такие записи не связаны с заказчиком, не имеют даты регистрации и связанных позиций в таблице OrderItems,
но могут содержать в себе заказы или другие группы. Если же поле group_name равно null, то запись является
заказом. Она обязательно связана с покупателем, имеет позиции и дату регистрации, но не может иметь
вложенных заказов. Записи связываются с родительской группой с помощью поля parent_id, которое хранит
row_id этой группы. Записи с parent_id равным null считаются корневыми. Заказ может иметь несколько позиций
с одинаковым наименованием.
таблицы: Orders, OrderItems, Customers
1 задание:1 задание: Написать функцию calculate_total_price_for_orders_group. Она получает row_id группы (либо заказа), и возвращает суммарную стоимость всех позиций всех заказов в этой группе (заказе), причем
суммирование должно выполняться по всему поддереву заказов, начинающемуся с данной группы.
Функция должна возвращать число.
Я написал запрос для заказов и подгрупп, которые содержат заказы, но не понимаю, как мне пройти по всем группам, которые содержат подгруппы и посчитать все их заказы. Я пытался добавить условие, которое закомментировано, но выдается ошибка "Вложенный запрос вернул больше одного значения.
SELECT SUM(OrderItems.price) AS total FROM OrderItems
JOIN Orders ON OrderItems.order_id = Orders.row_id
WHERE Orders.parent_id = '2' OR Orders.row_id = '2' AND Orders.group_name IS NULL
--OR Orders.parent_id = (Select Orders.row_id FROM Orders where Orders.parent_id = '2' )
2 задание:2 задание: Написать запрос, возвращающий наименования всех покупателей, у которых каждый заказ в 2020 году содержит как минимум одну позицию с наименованием "Кассовый аппарат".
Результатом выполнения запроса на тестовых данных будет таблица с одной строкой "Иванов".
Тут я написал запрос, но он возвращает все заказы 2020 года, в которых есть Кассовый аппарат, как мне проверить, чтобы он был именно в каждом заказе клиента от 2020 года?? ALL не помог
SELECT Customers.name FROM Customers
INNER JOIN Orders ON Customers.row_id = Orders.customer_id
INNER JOIN OrderItems ON Orders.row_id = OrderItems.order_id
WHERE Orders.registered_at > '2020/01/01'
AND OrderItems.name = ALL ( SELECT OrderItems.name FROM OrderItems WHERE OrderItems.name = 'Кассовый аппарат')