我有两个专栏:洗涤评分(wash_sc
)和农业评分(agric_sc
)。我想得到累计和按月分组的平均值。
目前,我能够对一个变量完成此操作,尽管返回响应需要很长时间:
select date_format(s1.createdAt,'%b-%Y') as month,
(
select AVG(s2.wash_sc)
from checkins s2
where s2.createdAt <= last_day(s1.createdAt)
) as total
from checkins s1
group by month
order by s1.createdAt;
我怎样才能做到这一点(更快!)对于两列?
3条答案
按热度按时间xqk2d5yq1#
根据您确认要实现运行平均值,根据您自己的查询,您需要根据运行总和除以运行计数进行计算:
sum(sum(wash_sc)) over w
使用SUM()
作为window function来产生每组内部SUM(wash_sc)
的累积和。累积计数也是如此。给定以下数据:
| 创建于|洗涤液|农业sc|
| - -----|- -----|- -----|
| 2019 -01- 21 00:00:00|十一|2|
| 2019 -01- 22 00:00:00|九个|4|
| 2019 -01- 23 00:00:00|七个|六|
| 2019 -01- 24 00:00:00| 5个|八|
| 2019 -01-05 00:00:00| 3|十个|
| 2019 -01- 16 00:00:00| 1|十二岁|
它输出:
| 年|月|积云洗涤sc|累积农业土壤|
| - -----|- -----|- -----|- -----|
| 二〇二一|1|一万一|两万|
| 2022| 1|六千|七万|
这里有一个db<>fiddle来玩。
tquggr8v2#
xuo3flqw3#
你可以使用窗口函数
AVG()
: