回程号使用 mysql 每个客户在给定月份的订单数量和平均支出

Returning no. of orders and average spending for each customer in a given month using mysql

我的数据库中有以下模式的表:

customers (customerID: integer, fName: string, lName: string)
items (itemID: integer, description: string, price: integer)
orders (orderID: integer, itemID: integer, aID: integer, customerID: integer, date: date)

对于每个客户,我想 return 客户 ID、订单数量和客户在 2013 年 3 月期间花费的平均金额(每个 customer/order 3 月的总支出)这包括所有客户,无论他们是否在 3 月实际购买了东西。

我试过使用连接和其他功能,但没有成功。 任何帮助,将不胜感激。 谢谢!

SELECT
c.customerID,
COUNT(DISTINCT o.orderID) AS number_of_orders,
SUM(i.price) / COUNT(DISTINCT o.orderID) AS my_average
FROM
customers c 
LEFT JOIN orders o ON o.customerID = c.customerID AND o.date >= '2013-03-01' AND o.date < '2013-04-01'
LEFT JOIN items i ON o.itemID = i.itemID
GROUP BY c.customerID

我在 COUNT() 函数中使用了 DISTINCT,因为每个订单可能有多个项目。我不知道你的数据。即使不是这种情况,COUNT(*)COUNT(whatever_column) 之间还是有区别的。前者计算每一行,后者仅计算此列中 NOT NULL 的行。

你必须使用LEFT JOIN,因为你想拥有每个客户,不管客户是否有订单。

订单的过滤条件(仅 2013 年 3 月的订单)在连接条件中,因为将其放在 WHERE 子句中会有效地将 LEFT JOIN 转换为 INNER JOIN(然后您将只获得具有以下条件的客户还在 2013 年 3 月订购了一些东西)。或者您必须使用 OR o.orderID IS NULL.

扩展 WHERE 条件

还有问题吗?