Средние расходы клиентов за каждый месяц и количество заказанных товаров за каждый месяц

0

У меня есть 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)

  • 0
    Также, пожалуйста, отформатируйте текущий запрос, чтобы он был читабельным. Запросы в одну строку не могут быть легко прочитаны, а это значит, что мы не можем вам помочь.
Теги:
jdbc

1 ответ

0

Вы хотите запрос агрегации с JOIN s. Используйте правильный синтаксис 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);
  • 0
    Большое спасибо за очень быстрый ответ. Кажется, отлично работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню