2015-03-03 140 views
-1

我有我的數據庫表與架構訂單,併爲每個客戶平均消費在某一個月的:返回no。用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) 

對每一個客戶,我想回在客戶,訂單數量和客戶在2013年3月花費的平均金額(3月份每個客戶/訂單的總支出)包括所有客戶,無論他們是否真的在三月份購買了某件東西。

我曾嘗試使用連接和其他功能,但沒有成功。 任何幫助,將不勝感激。 謝謝!

回答

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月訂購了一些東西)。或者你將不得不延長你的WHERE條件OR o.orderID IS NULL

還有其他問題?

+0

這太棒了!謝謝你,它完美的作品! @fancyPants – mar 2015-03-03 14:38:26

+0

如何使用ifnull函數,以便如果客戶沒有訂購任何東西,平均支出回報0.00? @花哨的褲子 – mar 2015-03-03 15:26:36

相關問題