Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql返回给定月份每个客户的订单数量和平均支出_Mysql_Database_Average_Arithmetic Expressions - Fatal编程技术网

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

使用mysql返回给定月份每个客户的订单数量和平均支出,mysql,database,average,arithmetic-expressions,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) 对于每位客户,我想返回customerID

我的数据库中有具有架构的表:

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)
对于每位客户,我想返回customerID、订单数量和客户在2013年3月期间的平均花费金额(每个客户/订单在3月份的总花费)。这包括所有客户,无论他们是否在3月份实际购买了东西

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

选择
c、 客户ID,
将(不同的o.orderID)计数为订单的数量,
总和(i.price)/计数(不同的o.orderID)作为我的平均值
从…起
顾客c
o.customerID=c.customerID和o.date>='2013-03-01'和o.date<'2013-04-01'上的左连接订单o
o.itemID=i.itemID上的左连接项i
按c.customerID分组
我在COUNT()函数中使用了DISTINCT,因为每个订单可能有多个项目。我不知道你的数据。即使情况并非如此,
COUNT(*)
COUNT(无论什么列)
之间也存在差异。第一个对每一行进行计数,后一个仅对该列中
不为NULL的行进行计数

您必须使用LEFT JOIN,因为您希望拥有每个客户,无论是否有该客户的订单

订单的过滤条件(仅限2013年3月的订单)处于联接条件中,因为将其放入WHERE子句将有效地将左侧联接转换为内部联接(这样,您将只获得在2013年3月也订购了某些产品的客户)。或者,您必须使用
或o.orderID扩展WHERE条件为NULL


还有问题吗?

太好了!谢谢你,它工作得很好@fancyPantshow使用ifnull函数,这样,如果客户没有订购任何东西,平均支出返回0.00@幻想者
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