(超详细一文看懂)MySQL累计求和问题及窗口函数order by的原理 |
您所在的位置:网站首页 › 游戏累计销量怎么查看记录 › (超详细一文看懂)MySQL累计求和问题及窗口函数order by的原理 |
数据表Activity: 查询结果Result: 其实就是累加问题。 1、使用表连接的方法 step1:自连接 select * from activity a1 left join activity a2 on a1.player_id=a2.player_id;结果:
在这之前,除了使用排名函数rank(),dense_rank(),row_number(),其他时候没太关注过窗口函数的运行逻辑,这次借着这个机会好好试了试,其实逻辑也很简单。 窗口函数格式:聚合函数 over (partition by column_name order by column_name) 也就是说重要的参数有两个: partition by:执行分组功能order by:表面是排序功能,实际是累计功能!!! 再强调一遍:order by 表面是排序功能,实际是累计功能!order by经常被用来和partition by连用,计算名次,可实际是累计作用的,仔细想想可以发现,计算组内名次不就是在累计吗,每个人的名次都是综合他之前所有人的名次基础上得来的。 所以当一些聚合函数(sum、avg、min、max等)和窗口函数连用的时候,order by 就是起累计作用的。 还是从例子来看吧: 还是以上面的那个表为例: 加上order by: select player_id, event_date, sum(games_played) over (partition by player_id order by event_date) as games_played_so_far from activity;很简单就能得到累加结果,这说明加上order by之后,就在组内(player_id)按照日期进行累加。 发现只是在组内进行求和,没有涉及按照日期累加,日期此时就是摆设。 除了求累加和,当然也可以使用其他聚合函数,这里也举举例子,加深印象。 max():截止目前的最大值。 select player_id, event_date, max(games_played) over (partition by player_id order by event_date) as games_played_so_far from activity;
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |