[英]SQL to calculate the average amount paid in the last 7 days
我有一个访问了 2 列的表和支付的金额
visited amount paid
-------------------------
2018-04-01 100
2018-04-02 200
2018-04-03 300
我想获得过去 7 天(今天和过去 6 天)支付的平均金额以及结果中的访问和支付金额:
Output:
visited amount average of last 7 days
---------------------------------------------------
2018-04-01 100 100
2018-04-02 200 150
2018-04-03 300 200
解释:
Row 1 : average amount = 100/1 = 100
Row 2 : average amount = (100 + 200)/2 = 150
Row 3 : average amount = (100 + 200 + 300)/3 = 200
我正在尝试使用 MySQL 或 Oracle 数据库,一切都很好。
您需要在 MySQL 5.x 中使用相关子查询:
SELECT visited, amount_paid, (
SELECT AVG(amount_paid)
FROM t AS x
WHERE x.visited >= t.visited - INTERVAL 6 DAY
AND x.visited <= t.visited
) AS 7_day_avg
FROM t
在 MySQL 8 和 Oracle 中,您可以使用 window 函数。
对于带有AVG()
分析 function 的 Oracle:
select t.*, avg(t."amount paid") over (order by t."visited") as "average of last 7 days"
from tablename t
where t."visited" >= to_date('08-11-2019', 'dd-MM-yyyy') - 7
and t."visited" <= to_date('08-11-2019', 'dd-MM-yyyy')
请参阅演示。
如果我理解正确,您需要累积运行平均值。 如果是这样,您可以使用 window 函数:
select t.*
avg(amount_paid) over (order by visited
range between interval '6' day preceding and current row
)
from t;
Oracle 和 MySQL 8+ 都支持这种语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.