2017-03-16 70 views
0

我有一個問題。即時通訊正在做一項任務,並且在某個特定請求中遇到問題。 的要求是:有關SQL Query的平均值和長度

Find Customers who have purchased more than 2 times. Get the 
1. customer information 
2. purchase frequency 
3. total spending 
4. avg basket size. 

我已經有1 - 3,但我不能做很多有關數字4 產品的價值可以有多個值,以逗號分隔。

〜>(產品編號:12,4,5) - >如果訂單購買超過1產物

我得到其中i可以與長度分開它替換,但即時通訊有點糊塗上的點如何將其展示給平均籃子大小。

感謝您的任何幫助!

SQL表圖片 sql table

**Customer** 
Customer ID 
Name 
AddressCity 

**Order** 
OrderID 
CustomerID 
ProductID 
Total 

**Delivery** 
DeliveryID 
OrderID 
AddressCity 

這是我當前的SQL語句

SELECT Customer.*, Order.CustomerID, 
    COUNT(Order.CustomerID) AS PurchaseFrequency, 
    SUM(Order.Total) AS TotalSpending 
    FROM Customer JOIN Order 
    ON Customer.CustomerID=Order.CustomerID 
    Group By Customer.CustomerID 
    Having Count(*) > 1 
+0

我建議創建一個臨時order2表,通過解析的ProductID併爲每個產品創建一行固定在當前的訂單表中的設計缺陷,然後更新您的查詢相匹配。然後,您也必須通過OrderID進行分組。 – Degan

+0

使用SELECT Customer。*,Order.CustomerID .... GROUP BY Customer.CustomerID是不好的SQL ...它給出了錯誤的結果閱讀https://www.psce.com/blog/2012/05/15/mysql-錯誤 - 你使用 - 組 - 由 - 正確/ –

+0

感謝您的幫助傢伙!歡呼聲 –

回答

1
LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1 

應該給你每個訂單的產品總量。 只需將其添加到您的現有聲明。

SELECT Customer.*, Order.CustomerID, 
    COUNT(Order.CustomerID) AS PurchaseFrequency, 
    SUM(Order.Total) AS TotalSpending, 
    AVG(LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1) as AvgProdQuantityPerOrder 
    FROM Customer JOIN Order 
    ON Customer.CustomerID=Order.CustomerID 
    Group By Customer.CustomerID 
    Having Count(*) > 1 


編輯:
在SELECT部分​​中所使用的字段也應該在GROUP BY指定部分。然後,您的查詢就會變成這樣的事:

SELECT Customer.CustomerID, Customer.Name, Customer.AdressCity, 
     COUNT(Order.CustomerID) AS PurchaseFrequency, 
     SUM(Order.Total) AS TotalSpending, 
     AVG(LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1) as AvgProdQuantityPerOrder 
FROM Customer JOIN 
     Order ON Customer.CustomerID=Order.CustomerID 
GROUP BY Customer.CustomerID, Customer.Name, Customer.AdressCity 
Having Count(*) > 1 
+0

啊是的。 但我認爲它要求獲取每個客戶ID的平均購物籃尺寸/平均產品數量。 是一樣的嗎? –

+0

根據提供的數據和描述,我假定「籃子」等於「秩序」。 – InD

+0

使用SELECT Customer。*,Order.CustomerID .... GROUP BY Customer.CustomerID是錯誤的SQL ...它給出了錯誤的結果閱讀https://www.psce.com/blog/2012/05/15/mysql-錯誤 - 你使用小組正確/ –