“交易”表是所有交易的列表,其中包含日期
、客户ID
、单位成本(价格
)和数量
。
我需要一份报告,将交易按月份分组并给出计数、总收入和每个客户的平均收入。
我无法弄清楚如何将 group by customerID
插入此选择语句:
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)。
最佳答案
您可以使用算术来完成此操作。 。 。将总数除以客户数量:
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);
关于客户每月的 SQL 平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16217187/