Mysql求累计和——游戏玩法分析Ⅰ

该博客讨论如何使用MySQL查询来计算每个玩家在特定日期之前累计玩过的游戏次数。通过内连接和聚合函数SUM,或者使用窗口函数,可以实现这一目标。示例展示了如何从Activity表中获取结果,并给出了正确查询的示例输出。
摘要由CSDN通过智能技术生成

以游戏玩法分析为例用Mysql求累计和

问题描述

Column NameType
player_idint
device_idint
event_datedate
games_playedint

 (player_id,event_date)是表格Activity的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0 )。

 编写一个 SQL 查询,同时报告每组玩家和日期,以及玩家到目前为止玩了多少游戏。也就是说,在此日期之前玩家所玩的游戏总数。

示例

Activity table:

player_iddevice_idevent_dategames_played
122016-03-015
122016-05-026
132017-06-251
312016-03-020
342018-07-035

Result table:

player_idevent_dategames_played_so_far
12016-03-015
12016-05-0211
12017-06-2512
32016-03-020
32018-07-035

解答

# Write your MySQL query statement below
select a1.player_id, a1.event_date, sum(a2.games_played) as games_played_so_far
from Activity as a1
inner join Activity as a2
on (a1.event_date >= a2.event_date and a1.player_id=a2.player_id)
group by a1.player_id, a1.event_date
order by a1.player_id;

或用窗口函数sum()

select player_id, event_date,
sum(games_played) over(partition by player_id order by event_date asc) as games_played_so_far
from Activity;

分析

用mysql求累计和主要是:

a1.event_date >= a2.event_date

然后对a2进行sum求和即可。
(第一次解的时候,忘了对 a1.player_id 分组)

用sum()做窗口函数也能求累计和!

参考:leetcode题库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值