【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

相关推荐
袋鼠云数栈15 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567315 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567316 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_18 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz18 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪18 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd19 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发19 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人19 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶19 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构