还没有。使用mysql在给定月份内每个客户的订单和平均支出

时间:2015-03-03 13:41:32

标签: mysql database average arithmetic-expressions

我的数据库上有表格的表格:

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)

对于每位客户,我想返回客户ID,订单数量以及客户在2013年3月所花费的平均金额(3月份每位客户/订单的总支出),这包括所有客户,无论他们是否实际上是在3月份买了东西。

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

1 个答案:

答案 0 :(得分:0)

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条件。

还有其他问题吗?