Консультация № 199537
06.11.2020, 15:32
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, написать 3 запроса в SQL.


Есть таблица pizza, содержащая id, наименование (name) и цену пиццы (price)

Есть таблица client, содержащая id и имя клиента (name)

Есть таблица orders, содержащая id_order заказа, дату заказа (dat_order) и внешний ключ id_client (ссылка на клиента)

И есть таблица order_content, содержащая внешние ключи id_order (ссылка на заказ) и id_pizza (ссылка на пиццу) и количество этой пиццы в заказе (quantity)


1) Посчитать общую сумму заказов за 2014 год.

2) Найти всех постоянных клиентов (тех, кто совершил больше одного заказа, и между заказами прошло не больше 30 дней, и последний заказ был совершён не более 30 дней назад).

3) Вывести стоимость среднего заказа в выходные.

Обсуждение

давно
Старший Модератор
312929
1973
07.11.2020, 06:29
общий
это ответ
Здравствуйте, Анна!

1) Посчитать общую сумму заказов за 2014 год
[code lang=sql]SELECT SUM(quantity*price) FROM (order_content JOIN orders USING(id_order)) JOIN pizza ON (id_pizza=pizza.id) WHERE YEAR(dat_order)=2014[/code]

2) Найти всех постоянных клиентов
[code lang=sql]SELECT id_client, name, count, max_interval FROM (SELECT id_client, COUNT(id_client) AS count, MAX(DATEDIFF(IFNULL((SELECT dat_order FROM orders WHERE id_order>o.id_order AND id_client=o.id_client ORDER BY dat_order LIMIT 1), CURDATE())), dat_order) AS max_interval FROM orders AS o GROUP BY id_client ORDER BY dat_order) JOIN client ON (id_client=client.id) WHERE count>1 AND max_interval<=30[/code]
За работоспособность не ручаюсь - проверял только на SQLite

3) Вывести стоимость среднего заказа в выходные
[code lang=sql]SELECT AVG(cost) FROM(SELECT SUM(quantity*price) AS cost FROM (order_content JOIN orders USING(id_order)) JOIN pizza ON (id_pizza=pizza.id) WHERE DAYOFWEEK(dat_order) IN (1, 7) GROUP BY id_order)[/code]
5
Спасибо большое!
Форма ответа