2013-04-25 129 views
2

該表的「交易」是所有具有date,customerID,單位成本(price)和quantity的交易的列表。客戶每月的SQL平均值

我需要一份報告,將交易分組爲幾個月,並給出計數,總收入和每位客戶的平均收入。

我無法搞清楚如何將group by customerID這個select語句:

SELECT extract(month FROM date) month, 
     count(*) purchases, 
     SUM(price*quantity) income, 
     AVG(SUM(price*quantity)) <-- this needs to be grouped by customerID aswell as month 
FROM 
    transactions 
WHERE 
    date BETWEEN i2 AND i3 
GROUP BY extract(month FROM date); 

我能得到的最接近的是一樣的東西:

SELECT extract(month FROM date) month, 
     count(*) purchases, 
     SUM(price*quantity) income, 
     (SELECT AVG(SUM(price*quantity)) 
     FROM transactions 
     GROUP BY customerID, extract(month FROM date)) 
FROM 
    transactions t 
WHERE 
    date BETWEEN i2 AND i3 
GROUP BY extract(month FROM date); 

但這種方法停止決策意識後我想了一會兒,因爲嵌套的select會返回多行。如果我添加一個where條款,並刪除在第二個group by date選擇:

(SELECT AVG(SUM(price*quantity)) 
FROM transactions 
GROUP BY customerID 
where extract(month FROM date) = month) 

然後,它會返回...我不知道,但它是錯誤的。

這是一個oracle數據庫的方式(我認爲是10g)。

回答

2

您可以使用算術做到這一點。 。 。除以客戶總數:

SELECT extract(month FROM date) month, 
     count(*) purchases, 
     SUM(price*quantity) income, 
     sum(price*quantity)/count(distinct customerId) 
FROM 
    transactions 
WHERE 
    date BETWEEN i2 AND i3 
GROUP BY extract(month FROM date); 
+0

......我不知道爲什麼我沒有想到這一點。謝謝。 – slicedtoad 2013-04-25 14:32:22