【SQL高频基础题】550.游戏玩法分析IⅣ

这个SQL花了很久。但是有挺多启发的。

如果我们做不出来,就去看答案。

但是看完答案之后,不要着急就去看下一道题,先把这道题吃透,后面的题目就会更有思路。

题目:

Table: Activity

复制代码
+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
(player_id,event_date)是此表的主键(具有唯一值的列的组合)。
这张表显示了某些游戏的玩家的活动情况。
每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。

编写解决方案,报告在首次登录的第二天再次登录的玩家的 比率四舍五入到小数点后两位。换句话说,你需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。

思考:

其实一步一步来的。

需求是 首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。

所以,我们只需要2个数据。

其中1个数据玩家总数比较好找。

另一个数据呢,需要稍花点心思。

我是看答案才写出来的。

人家的思路是很清晰的

1先找所有人第二天登录的时间
2然后连接原表 匹配人和时间对应的 找出所有第二天登录的人
3然后 再 把它作为数据来源,最后相除就行了。

我自己写是猜的,是完全用自己之前的知识去胡诌的

第1步和第2步,它是分开的。

而我总是把它混在一起,所以就很混乱,怎么也写不出来

下次我就知道了,如果要找多少天之后,就先查出来x天之后的,作为临时表,再去连本身表

在做这道题的时候,我还有其他10点收获:

1.子查询的select * ,可以在最外面作为 表资料传入 就像本sql 最后的 Result,Activity 一样,然后直接在select里count。而不用写在select 里 写select,好长的。

2.连接表的时候 除了left ,right join。还可以 直接用","然后后面用 where

3.min 就需要group by

4.有min函数 ,不能作为表连接on 的条件

5.group by 后面需要跟所有select查询 东东

6.min 函数 是 min()。不是 (min)

7.count (distinct(xxx)) 而不是 count distinct xxx

8.如果sql执行错误,试着去执行每个片段sql,这样能够快速找到问题

9.ifnull 的判断

10.学新东西刚开始总是非常之费劲的。感觉自己是个傻逼。

参考答案:

select ifnull(round(count(distinct (Result.player_id))/count(distinct (Activity.player_id)),2),0)as fraction

from (select b.player_id from (select a.player_id,DATE_ADD(min(a.event_date),INTERVAL 1 day) as tomorrow

from Activity a group by a.player_id ) b ,Activity where b.player_id = Activity.player_id and b.tomorrow = Activity.event_date)as Result,Activity

相关推荐
樹JUMP2 分钟前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
用什么都重名5 分钟前
Redis 入门与实践:从基础到 Stream 消息队列
数据库·redis·缓存
Mistra丶9 分钟前
记一次 JVM+Postgresql的 “死锁” 问题排查
jvm·数据库·postgresql·死锁
一然明月10 分钟前
Qt QML 锚定(Anchors)全解析
java·数据库·qt
分享牛28 分钟前
Operaton入门到精通23-Operaton 2.0 原生支持 JUnit 6 核心指南
数据库·junit
编码忘我1 小时前
mysq系列之事务
数据库
知识分享小能手1 小时前
Redis入门学习教程,从入门到精通,Redis进阶编程知识点详解(5)
数据库·redis·学习
MekoLi291 小时前
MongoDB 新手完全指南:从入门到精通的实战手册
数据库·后端
cyforkk1 小时前
Spring AOP 进阶:揭秘 @annotation 参数绑定的底层逻辑
java·数据库·spring
2401_884970611 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python