当前位置: 首页 > news >正文

【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

http://www.lryc.cn/news/298053.html

相关文章:

  • sheng的学习笔记-部署-目录
  • 【Java】悲观锁和乐观锁有什么区别?
  • Elasticsearch:使用查询规则(query rules)进行搜索
  • Java核心设计模式:代理设计模式
  • JSP编程
  • 【Flink入门修炼】1-1 为什么要学习 Flink?
  • 刘谦龙年春晚魔术模拟
  • re:从0开始的CSS学习之路 9. 盒子水平布局
  • 【MySQL基础】:深入探索DQL数据库查询语言的精髓(上)
  • JavaScript实现轮播图方法
  • Web课程学习笔记--jsonp的原理与简单实现
  • 第78讲 修改密码
  • Docker 容器网络:C++ 客户端 — 服务器应用程序。
  • Android 识别车牌信息
  • C#在窗体正中输出文字以及输出文字的画刷使用
  • 二十、K8S-1-权限管理RBAC详解
  • 【PTA|期末复习|编程题】数组相关编程题(一)
  • [office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享
  • 面试 JavaScript 框架八股文十问十答第六期
  • 【Web】小白友好的Java内存马基础学习笔记
  • Rust猜数字游戏
  • .gitlab-ci.yml文件参数配置和使用
  • Go语言从基础到高级-目录
  • Linux CentOS stream 9 alias
  • WebSocketServer+redis实时更新页面数据
  • 快速掌握Vue.js框架:从入门到实战
  • ###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型
  • 机器学习案例1:利用 Python 将语音转换为文本
  • 杨辉三角的变形(数学)
  • YOLOv5改进 | 融合改进篇 | 华为VanillaNet + BiFPN突破涨点极限