MYSQL 中没有日期但按另一列分组的移动平均值
Moving average in MYSQL without dates but grouped by another column
我在 MYSQL(版本 5.7.33)中有一个 table,如下所示:
日期
销售代表
促销
2021-04-01
杰克
10
2021-04-02
杰克
8
2021-03-01
丽莎
10
2021-03-02
丽莎
14
2021-03-03
丽莎
21
2021-03-04
丽莎
7
2021-03-08
丽莎
10
2021-03-09
丽莎
20
2021-03-10
丽莎
15
我想要 Sale 列的移动平均值,但不希望它基于日期,因为日期有差距,我希望它基于行号并按 SalesRep 分组。所以像这样:
日期
销售代表
促销
平均移动
2021-04-01
杰克
10
10
2021-04-02
杰克
8
9
2021-03-01
丽莎
10
10
2021-03-02
丽莎
14
12
2021-03-03
丽莎
21
15
2021-03-04
丽莎
7
13
2021-03-08
丽莎
10
12.4
2021-03-09
丽莎
20
13.6
2021-03-10
丽莎
15
13.8
因此,移动平均值适用于特定销售代表从开始到结束的所有日期,然后从另一个销售代表开始,依此类推。在 MYSQL 中可以这样做吗?提前致谢!
您可以将 avg 用作 window 函数,并为此添加 frame 子句:
SELECT dt, salesrep, sale,
AVG(sale) OVER (PARTITION BY salesrep ORDER BY dt
ROWS UNBOUNDED PRECEDING)
AS moveavg
如果没有 window 函数,您只需连接每个销售代表之前的所有行:
select a.dt, a.salesrep, a.sale, avg(b.sale) as moveavg
from mysterytablename a
join mysterytablename b on b.salesrep=a.salesrep and b.dt <= a.dt
group by a.salesrep, a.dt
我在 MYSQL(版本 5.7.33)中有一个 table,如下所示:
日期 | 销售代表 | 促销 |
---|---|---|
2021-04-01 | 杰克 | 10 |
2021-04-02 | 杰克 | 8 |
2021-03-01 | 丽莎 | 10 |
2021-03-02 | 丽莎 | 14 |
2021-03-03 | 丽莎 | 21 |
2021-03-04 | 丽莎 | 7 |
2021-03-08 | 丽莎 | 10 |
2021-03-09 | 丽莎 | 20 |
2021-03-10 | 丽莎 | 15 |
我想要 Sale 列的移动平均值,但不希望它基于日期,因为日期有差距,我希望它基于行号并按 SalesRep 分组。所以像这样:
日期 | 销售代表 | 促销 | 平均移动 |
---|---|---|---|
2021-04-01 | 杰克 | 10 | 10 |
2021-04-02 | 杰克 | 8 | 9 |
2021-03-01 | 丽莎 | 10 | 10 |
2021-03-02 | 丽莎 | 14 | 12 |
2021-03-03 | 丽莎 | 21 | 15 |
2021-03-04 | 丽莎 | 7 | 13 |
2021-03-08 | 丽莎 | 10 | 12.4 |
2021-03-09 | 丽莎 | 20 | 13.6 |
2021-03-10 | 丽莎 | 15 | 13.8 |
因此,移动平均值适用于特定销售代表从开始到结束的所有日期,然后从另一个销售代表开始,依此类推。在 MYSQL 中可以这样做吗?提前致谢!
您可以将 avg 用作 window 函数,并为此添加 frame 子句:
SELECT dt, salesrep, sale,
AVG(sale) OVER (PARTITION BY salesrep ORDER BY dt
ROWS UNBOUNDED PRECEDING)
AS moveavg
如果没有 window 函数,您只需连接每个销售代表之前的所有行:
select a.dt, a.salesrep, a.sale, avg(b.sale) as moveavg
from mysterytablename a
join mysterytablename b on b.salesrep=a.salesrep and b.dt <= a.dt
group by a.salesrep, a.dt