【MYSQL】开窗函数如何实现组内对平均值仅统计一次(分组查询) 10C

问题详细:当下对历史商品进行分析,统计出来历史的前几天平均成交量,例如存在三天历史数据,昨天成交10,前天成交20,大前天成交30,则展示效果为前一天平均成交量10,前两天平均成交量15,前三天平均成交量20。

当下我的处理方式:
源表采用自关联处理了一下,用天数小于等于当天天数和商品主键作为条件,自关联出6条记录,然后用开窗统计平均值会统计六次(每条记录均会统计,有三次是重复统计的),重复的三次是性能损耗。

注意:
1、举例为三条数据,实际当数据拓展到千万级时,重复统计对性能影响会极大
2、除了平均成交量外,还需要展示当天价格字段,若是group by来分组的话,价格是无法展示出来的,除非是再一步关联查询,性能堪忧

预期:除了group by分组外,开窗函数中是否能够实现防止重复统计

问题瓶颈点:开窗函数,能否控制同分组(查询窗口)内仅执行一次聚合查询,而非组内的每条记录执行一次聚合查询

u013318424
名字代号而已 不用表的自关联,真正的开窗实现方式:开窗条件(商品主键),排序条件(日期降序,或者是天数升序),分组内二级条件(rows 从窗体内开始当当前笔),对以上分组进行平均值求值即可。代码格式:SELECT row_number() OVER(PARTITION BY shop_xxx ORDER BY date DESC ) day_count, date, shop_xxx, AVG(deal_amount) OVER (PARTITION BY shop_xxx ORDER BY date DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) avg_deal_amount from table_name
5 个月之前 回复
u013318424
名字代号而已 不用表的自关联,真正的开窗实现方式:开窗条件(商品主键),排序条件()
5 个月之前 回复

1个回答

u013318424
名字代号而已 抱歉抱歉,又仔细看了下开窗函数,原版的开窗函数由三部分控制条件组成:窗口字段(分组)+排序条件+分组内二级条件(frame);可以用分组内二级条件实现,而不用表的自关联
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问