【问题标题】:Average customer spending at each month and number of ordered items at each month每个月的平均客户支出和每个月的订购商品数量
【发布时间】:2019-04-21 15:34:33
【问题描述】:

我有 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. 订购的商品数量?

我已经在这个数据库上写了一些查询。
由于我使用 JDBC 为 Java 应用程序执行此操作,也许我可以拆分这两个查询并分别计算平均值,但最好的方法是什么?有没有办法只用两个 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";

Look here for database design (ERD)

【问题讨论】:

  • 另外,请格式化您当前的查询,使其可读。一行查询不容易阅读,这意味着我们无法为您提供帮助。

标签: java mysql sql jdbc


【解决方案1】:

您希望使用JOINs 进行聚合查询。使用正确的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);

【讨论】:

  • 非常感谢您的快速响应。它似乎工作得很好。
猜你喜欢
  • 2022-11-09
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多