Leetcode-sql-five
本文中总结了LeetCode
中关于SQL
的游戏玩家分析的4个题目
- 玩家首次登陆分析
- 首次登陆的设备名称
- 此日期之前的玩家游戏总数
- 再次登录的分数
511-游戏玩家分析(1)-首次登陆的日期
题目
有个activity
表,记录了一些游戏玩家在游戏平台上的行为活动。
- 表的主键是play_id,event_data
- 每行数据记录了一名玩家在退出平台之前,当天使用同一设备登陆后打开游戏的数目(可能是0个)
写一条SQL语句,获取每个玩家第一次登陆平台的日期,实现如下结果:
答案
1 | select play_id,min(event_date) as first_login |
总结
本题难度是很简单的,只需要使用min
和group by
进行分组即可
min
函数返回的最小值,不包含NULL
- min和max函数也可用于文本列,
Group by
函数根据一个或者多个列对结果进行分组
512-游戏玩家分析(2)-首次登陆的设备名称
题目
有个activity
表,记录了一些游戏玩家在游戏平台上的行为活动。
- 表的主键是
play_id,event_data
- 每行数据记录了一名玩家在退出平台之前,当天使用同一设备登陆后打开游戏的数目(可能是
0
个)
编写SQL
语句,描述每一个玩家首次登陆的设备名称!
- 首次登陆
- 设备名称
答案
- 通过
right jion
解决
1 | select a.player_id, a.device_id from activity a |
- 通过$\color{red}{子查询}$来解决
1 | select a.play.id, a.device_id |
总结
- 怎么确定首次登陆:使用上面
511
题目的结果作为中间一个表格 - 可以用子查询或者两个表的连接
rigth join on
相当于将右边的结果作为左边的条件
534-游戏玩家分析(3)-玩家的游戏总数
题目
有个activity
表,记录了一些游戏玩家在游戏平台上的行为活动。
- 表的主键是
play_id,event_data
- 每行数据记录了一名玩家在退出平台之前,当天使用同一设备登陆后打开游戏的数目(可能是0个)
编写SQL
语句,同时报告每组玩家和日期,以及玩家到此为止玩了多少场游戏,也就是此日期之前的游戏总数。
答案
1 | select a.player, a.event_date, (select sum(b.games_played) -- 求和函数sum() |
总结
- 玩家名称和日期可以直接筛选
- 游戏总数需要另外使用
sum
函数和$\color{red}{中间表}$来解决
550-游戏玩家分析(4)-再次登录的分数
题目
题目同上,编写的SQL
语句要求不同:首次登陆的第二天再次登录的玩家的分数,四色五入到小数点后两位
- 首次登陆的第二天再登陆
- 玩家分数
- 小数位要求:
round
函数
答案
1 | select round((select count(distinct b.play_id) |