Средние расходы клиентов за каждый месяц и количество заказанных товаров за каждый месяц - PullRequest
1 голос
/ 21 апреля 2019

У меня есть 4 таблицы:

CUSTOMER (idCustomer,name,phone,email, markdown)
ORDER (idOrder,day,Customer_idCustomer)
ORDERITEM (idOrderItem, quantity, Order_idOrder, Product_idProduct)
PRODUCT (idProduct,name,price,description).

Какой будет запрос для:

  1. Средние расходы клиентов (на каждого клиента) в отдельные месяцы

  2. Количество заказанных товаров?

Я уже написал несколько запросов к этой базе данных.
Поскольку я делаю это для приложения Java с JDBC, возможно, я смогу разделить эти два запроса и рассчитать среднее значение отдельно, но каков наилучший подход? Есть ли способ сделать это только с двумя запросами SQL?

Спасибо за помощь.

Запрос, который я использую для снижения цены:

String sql = "SELECT c.markdown, SUM(oi.quantity * p.price) 
FROM orderitem oi, `order` o, product p, customer c 
WHERE c.idCustomer = o.Customer_idCustomer 
AND oi.Order_idOrder=o.idOrder 
AND oi.Product_idProduct=p.idProduct 
AND o.idOrder=" + idOrderValue + " 
GROUP BY oi.Order_idOrder";

Смотрите здесь для проектирования базы данных (ERD)

1 Ответ

1 голос
/ 21 апреля 2019

Требуется запрос агрегации с JOIN с.Используйте правильный JOIN синтаксис!Не используйте запятые в предложении FROM:

SELECT year(o.day) as yyyy,
       month(o.day) as mm,
       SUM(oi.quantity * p.price) / COUNT(DISTINCT c.idCustomer) as avg_customer_spending,
       SUM(oi.quantity) as num_items
FROM customers c JOIN
     orders o
     ON c.idCustomer = o.Customer_idCustomer JOIN
     orderitem oi
     ON oi.Order_idOrder = o.idOrder JOIN
     product p
     ON oi.Product_idProduct = p.idProduct 
GROUP BY year(o.day), month(o.day);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...