力扣-游戏玩法分析
游戏 分析 力扣 玩法
2023-09-14 09:13:33 时间
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。
文章目录
前言
一、题目:511. 游戏玩法分析
活动表 Activity:
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| player_id | int |
| device_id | int |
| event_date | date |
| games_played | int |
+--------------+---------+
表的主键是 (player_id, event_date)。
这张表展示了一些游戏玩家在游戏平台上的行为活动。
每行数据记录了一名玩家在退出平台之前,当天使用同一台设备登录平台后打开的游戏的数目(可能是 0 个)。
写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。
查询结果的格式如下所示:
Activity 表:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1 | 2 | 2016-03-01 | 5 |
| 1 | 2 | 2016-05-02 | 6 |
| 2 | 3 | 2017-06-25 | 1 |
| 3 | 1 | 2016-03-02 | 0 |
| 3 | 4 | 2018-07-03 | 5 |
+-----------+-----------+------------+--------------+
Result 表:
+-----------+-------------+
| player_id | first_login |
+-----------+-------------+
| 1 | 2016-03-01 |
| 2 | 2017-06-25 |
| 3 | 2016-03-02 |
+-----------+-------------+
二、解题
1.正确示范①
提交SQL
select player_id,
min(event_date) first_login
from Activity
group by player_id;
运行结果
![](https://img-blog.csdnimg.cn/88cbd4ce1900488bb1e4a1efbb11951f.png)
2.正确示范②
提交SQL
select player_id,event_date first_login
from(
select player_id,event_date,
row_number() over(partition by player_id order by event_date) col
from Activity
) u where col=1;
运行结果
![](https://img-blog.csdnimg.cn/809b0f82dbad46daaf865305567d719d.png)
3.正确示范③
提交SQL
select player_id,event_date first_login
from(
select player_id,event_date,
dense_rank() over(partition by player_id order by event_date) col
from Activity
) u where col=1;
运行结果
![](https://img-blog.csdnimg.cn/b1ef261c035041f98691eac892b60f0f.png)
4.正确示范④
提交SQL
select player_id,event_date first_login
from(
select player_id,event_date,
rank() over(partition by player_id order by event_date) col
from Activity
) u where col=1;
运行结果
![](https://img-blog.csdnimg.cn/1e9accc6bd2c43c49c26e606fbd6bc33.png)
5.其他
总结
正确示范①思路:
通过聚合函数group by player_id,然后对event_date求min即可;
正确示范②思路:
通过row_number() over(partition by player_id order by event_date) 取排名1;
正确示范③思路:
通过dense_rank() over(partition by player_id order by event_date) 取排名1;
正确示范④思路:
通过rank() over(partition by player_id order by event_date) 取排名1;
题目有一个很关键的点,表的主键是 (player_id, event_date),如果没这句话,示范③和示范④就有可能存在多个排名1。
相关文章
- 联通沃商店游戏中心接入规范(2014新版)
- Direct3D 开发之旅 3D 游戏基本概念的介绍1
- win8 开发之旅(4) --五子棋游戏开发 面向对象的分析
- Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
- Java实现 LeetCode 794 有效的井字游戏 (暴力分析)
- Java实现 LeetCode 299 猜数字游戏
- Java实现 蓝桥杯VIP 算法训练 传球游戏
- 小白学数据分析--回归分析在游戏人气分析的应用探索
- Weex 版扫雷游戏开发
- 【刷题】面筋-测试-游戏商城模块的测试用例
- 【贪心】LeetCode 55. 跳跃游戏【中等】
- 【u012】数字游戏
- 海量游戏日志的存储与分析了却了谁的心事?
- 送给她的开心游戏——连连看游戏(Python代码实现)
- 【华为OD机试 2023最新 】数字加减游戏(C++ 100%)
- Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
- 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
- 假期无聊冰河开发了一款国民级游戏!
- SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第三天任务攻略
- cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现
- C++的学习心得和知识总结(十七)|Visual Studios 2019配置游戏开发引擎HGE1.8教程