题目:

需求:编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的分数,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。

查询结果格式如下所示:

 解题思路:

①先将登录日期上移一行,方便筛选出连续登录数;

1  select player_id ,event_date,
2 lead(event_date,1) over(partition by player_id order by event_date asc) as date2
3 from Activity

②再以player_id分组,筛选出连续两天登录的用户信息;

1 select  player_id , min(event_date) as date1,date2
2 from(
3 select player_id ,event_date,
4 lead(event_date,1) over(partition by player_id order by event_date asc) as date2
5 from Activity
6 ) t1
7 group by player_id
8 having datediff(date2 ,date1)=1

③求出连续登录两个的玩家数和玩家总数,进行计算

 1 select round(count(1)/(
2 select count(distinct player_id)
3 from Activity
4 ),2) fraction
5 from (
6 select player_id , min(event_date) as date1,date2
7 from(
8 select player_id ,event_date,
9 lead(event_date,1) over(partition by player_id order by event_date asc) as date2
10 from Activity
11 ) t1
12 group by player_id
13 having datediff(date2 ,date1)=1
14 ) t2

方法二:

①先求出所有玩家的第一次登录时间

1 SELECT
2 player_id,
3 MIN(event_date) AS first_date
4 FROM Activity
5 GROUP BY player_id;

②将原表与第一步求出来的临时表进行左连接;

1 select *
2 from activity a
3 left join (SELECT
4 player_id,
5 MIN(event_date) AS first_date
6 FROM Activity
7 GROUP BY player_id) as b
8 on a.player_id = b.player_id and datediff(event_date,first_date) = 1;

③统计出左右两个表的数量,进行计算;

1 SELECT round(count(b.player_id)/count(DISTINCT a.player_id) , 2) AS fraction
2 FROM activity a
3 LEFT JOIN (
4 SELECT
5 player_id,
6 MIN(event_date) AS first_date
7 FROM Activity
8 GROUP BY player_id) AS b
9 ON a.player_id = b.player_id AND datediff(event_date,first_date) = 1;

小知识:

①lead() over:

1.点击这里可以看语法

2.这里也可以

②左右内连接:跳转这里看笔记

③笛卡儿积:两个集合相乘的结果。

假设集合A={a, b},集合B={0, 1,2},则两个集合的笛卡尔积为{(a, 0),(a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

力扣550(MySQL)-游戏玩法分析Ⅳ(中等)的更多相关文章

  1. 力扣---511. 游戏玩法分析 I

    活动表 Activity: +--------------+---------+| Column Name  | Type    |+--------------+---------+| player ...

  2. [LeetCode]534. 游戏玩法分析 III(Mysql)

    题目 Table: Activity +--------------+---------+ | Column Name | Type | +--------------+---------+ | pl ...

  3. 简单Elixir游戏服设计- 游戏玩法介绍

    抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...

  4. 基于Spring框架怎么构建游戏玩法服务

    说明:本篇阐述的问题,是基于前面的游戏服务器架构设计的. 问题 众所周知,Spring最擅长的领域是无状态服务的构建,而游戏(尤其是玩法部分)是有状态的.以棋牌游戏为例,玩法服务里面大概涉及以下两类对 ...

  5. 力扣---45. 跳跃游戏 II

    给定一个长度为 n 的 0 索引整数数组 nums.初始位置为 nums[0].每个元素 nums[i] 表示从索引 i 向前跳转的最大长度.换句话说,如果你在 nums[i] 处,你可以跳转到任意 ...

  6. 力扣---1306. 跳跃游戏 III

    这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处.当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够跳到对应元素值 ...

  7. 网页闯关游戏(riddle webgame)--游戏玩法和整体介绍

    前言: 记得上大学那会, 有位传说中的大牛, 写了一个网页闯关类的游戏. 当时我们玩得不亦乐乎, 也是第一次接触到这种形式的游戏. 不过当时纯玩家心态, 并没有想过去创造一个. 最近想起这事, 突然想 ...

  8. 【Warrior刷题笔记】力扣169. 多数元素 【排序 || 哈希 || 随机算法 || 摩尔投票法】详细注释 不断优化 极致压榨

    题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element/ 注意,该题在LC中被标注为easy,所以我们更多应该关 ...

  9. 简单Elixir游戏服设计-玩法simple_poker

    上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...

  10. MySQL高可用新玩法之MGR+Consul

    前面的文章有提到过利用consul+mha实现mysql的高可用,以及利用consul+sentinel实现redis的高可用,具体的请查看:http://www.cnblogs.com/gomysq ...

随机推荐

  1. python 文件操作常用方法

    一 python文件创建 import os import argparse def file_write(file_name,msg): f = open(file_name,"a&quo ...

  2. Android Studio导出APP的数据库db文件

    原文地址:Android Studio导出APP的数据库db文件 | Stars-One的杂货小窝 最近项目开发需要使用到Android内置的Sqlite存数据,但是公司里没有对应的调试环境,只能让现 ...

  3. YUV亮度扫描小工具,如何确定尺寸以及错误尺寸下图像发生什么变化

    地址https://github.com/bbqz007/zhelper-wxWidgets 当你有一个帧yuv,但却不知道长宽还有格式时,本demo可以帮你通过扫描Y分量灰度图,确定长宽,然后选择合 ...

  4. CentOS 同时安装多个版本的Python3

    1.背景 已安装了 Python3.6.4,需要再安装 Python3.9 版本 2.操作步骤 (1)寻找当前 Python3.9 版本最新稳定版的子版本 通过官网查找,目前为 3.9.18,下载到本 ...

  5. 什么会导致JAVA应用程序的CPU使用率飙升

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  6. clickhouse使用心得

    clickhouse目前用在实时BI后台,只要数据稳定落库了,出报表很快,临时查询也很快,在使用过程中,对它的一些优点和不足也是深有体会,这里总结一下,不能做到面面俱到,但尽可能详细的介绍实际应用需要 ...

  7. WPF状态保存

    由于WPF做客户端的时候,它不像BS那样有Session,Cookie给你使用,所以保存状态你首先想到的就是数据库了. 但是你不可能什么都放在数据库,为此还专门为它建立一张表. 而WPF中能用到的除了 ...

  8. 记录--封装一个通过js调用的全局vue组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Noti ...

  9. drools中使用function

    一.背景 当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢?那么在drools中如何自定义function? 二.需 ...

  10. Dockerfile 时区设置(MacOs有效)

    # 设置时区RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/t ...