简体   繁体   English

每个月的平均客户支出和每个月的订购商品数量

[英]Average customer spending at each month and number of ordered items at each month

I have 4 tables:我有4张桌子:

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

What would be the query for:什么是查询:

  1. Average customer spending (for each customer) in individual months个别月份的平均客户支出(每个客户)

  2. Number of ordered items?订购的商品数量?

I already wrote some queries on this database.我已经在这个数据库上写了一些查询。
Since I do it for Java application with JDBC, maybe I can split these two queries and make calculation of average separately but what is the best approach?因为我是用 JDBC 为 Java 应用程序做的,也许我可以拆分这两个查询并分别计算平均值,但最好的方法是什么? Is there a way how to do it just with two SQL queries?有没有办法只用两个 SQL 查询来做到这一点?

Thank you for help.谢谢你的帮助。

Query I use for price reduction:我用于降价的查询:

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)在此处查看数据库设计 (ERD)

You want an aggregation query with JOIN s.你想要一个带有JOIN的聚合查询。 Use proper JOIN syntax!使用正确的JOIN语法! Do not use commas in the FROM clause:不要在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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM