SQL助你面大厂(N日留存率)

news2024/7/2 4:01:42

       在一些游戏中比较关注的就是留存率,随着王者的更新,画质在不断的优化,可是匹配机制确实一成不变,导致很多人逐渐退游,那么我们的王者的官方是怎么知道有这么多人退游么?退游了是相当于删除玩家对应的那条数据库信息么?很显然不是,那么怎么才能统计出玩家的留存率问题?这也成了游戏公司比较看重的一点,所以今天我们来讲解一下这类问题:

       现在你是腾讯游戏旗下的工作人员,有一个任务,就是最近曙光英雄的出现,导致很多王者玩家开始转战曙光英雄,然后老板让你统计一下从2023-08-20号开始,后面2天的玩家留存率,你准备怎么实现这个任务?如果完成不了就会被K,于是你打开了我的博客,学习了起来!!!

 数据如下:

CREATE TABLE lea(
cuid VARCHAR(20),
game VARCHAR(20),
cur_date VARCHAR(20)
)
INSERT INTO lea (cuid,game,cur_date) VALUES('1','王者','2023-08-20'),('1','王者','2023-08-21'),('1','王者','2023-08-22'),('2','王者','2023-08-20')
,('2','王者','2023-08-21'),('3','王者','2023-08-21'),('1','王者','2023-08-28')

       因为老板让你统计2天的统计量,你要讨老板欢心,肯定想尽一切办法去优化查询数据,当你看到了这其中还有其他日期的数据,你果断的选择先对数据进行过滤,再进行查询

SELECT cuid,
COUNT(IF(cur_date='2023-08-20',1,NULL)) AS '2023-08-20',
COUNT(IF(cur_date='2023-08-21',1,NULL)) AS '2023-08-21',
COUNT(IF(cur_date='2023-08-22',1,NULL)) AS '2023-08-22'
FROM lea WHERE cur_date IN('2023-08-20','2023-08-21','2023-08-22')
GROUP BY cuid

       一看查询结果居然还有2023-08-20没有登录的用户,这条数据显然是脏数据,我们也对其进行过滤

SELECT cuid,
COUNT(IF(cur_date='2023-08-20',1,NULL)) AS Login20,
COUNT(IF(cur_date='2023-08-21',1,NULL)) AS Login21,
COUNT(IF(cur_date='2023-08-22',1,NULL)) AS Login22
FROM lea WHERE cur_date IN('2023-08-20','2023-08-21','2023-08-22')
GROUP BY cuid
HAVING  Login20>0

我们再对这张表进行查询,嵌套一个子查询:

SELECT '2023-08-20的留存情况' AS TYPE,
    COUNT(cuid) AS total,
    COUNT(IF(Login21>0,1,NULL)) AS login_21,
    COUNT(IF(Login22>0,1,NULL)) AS login_22
FROM
(
SELECT cuid,
COUNT(IF(cur_date='2023-08-20',1,NULL)) AS Login20,
COUNT(IF(cur_date='2023-08-21',1,NULL)) AS Login21,
COUNT(IF(cur_date='2023-08-22',1,NULL)) AS Login22
FROM lea WHERE cur_date IN('2023-08-20','2023-08-21','2023-08-22')
GROUP BY cuid
HAVING  Login20>0) AS temp

 

 后面几天的上线人数已经求出来了,但是存留率应该是剩下的人数处于刚开始的人数

SELECT  TYPE,
 CONCAT(ROUND(login_21/total * 100, 2), '%') AS '21日留存率',
 CONCAT(ROUND(login_22/total * 100, 2), '%') AS '22日留存率'
FROM
(SELECT '2023-08-20的留存情况' AS TYPE,
    COUNT(cuid) AS total,
    COUNT(IF(Login21>0,1,NULL)) AS login_21,
    COUNT(IF(Login22>0,1,NULL)) AS login_22
FROM
(
SELECT cuid,
COUNT(IF(cur_date='2023-08-20',1,NULL)) AS Login20,
COUNT(IF(cur_date='2023-08-21',1,NULL)) AS Login21,
COUNT(IF(cur_date='2023-08-22',1,NULL)) AS Login22
FROM lea WHERE cur_date IN('2023-08-20','2023-08-21','2023-08-22')
GROUP BY cuid
HAVING  Login20>0) AS temp) AS arr

 

 最后这种类型题也就解决了,你也因此保证了工作!!!

上模板:

->where 日期 in (首日,1天后,7天后)
->group by 用户
->count(if(日期=首日,1,null)) as cnt
  count(if(日期=1天后,1,null)) as cnt2
  count(if(日期=7天后,1,null)) as cnt8
->having cnt->0
->count(user_id) as 首日总数
  count(if(cnt2>0,1,null)) as 次日留存率
  count(if(cnt8,1,null)) as 7日留存率
->次日留存率/首日总数 as 次日留存率
  7日留存率/首日总数 as 7日留存率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/903441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第 7 章 排序算法(4)(插入排序)

7.7插入排序 7.7.1插入排序法介绍: 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 7.7.2插入排序法思想: 插入排序(Insertion Sorting)的基本思想是:把n个待排…

【令牌桶算法与漏桶算法】

💧 令牌桶算法与漏桶算法 \color{#FF1493}{令牌桶算法与漏桶算法} 令牌桶算法与漏桶算法💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专…

机器学习深度学习——NLP实战(情感分析模型——RNN实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(情感分析模型——数据集) 📚订阅专栏:机器学习&…

玩转红黑树:手把手教你实现和理解红黑树

玩转红黑树:手把手教你实现和理解红黑树 引言一、红黑树的定义1.1、理论知识1.2、代码实现1.3、代码优化 二、红黑树的旋转2.1、理论知识2.2、代码实现 三、红黑树插入节点3.1、理论知识3.2、代码实现 四、红黑树删除节点4.1、理论知识4.2、代码实现 五、红黑树的查…

04_17页回收问题和水位线和swap交换空间和oom,内存性能微调

前言 应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。 当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会…

基于STM32CubeMX和keil采用SPI通信实现轮询方式读写W25Q128获取设备ID

文章目录 前言1. SPI通信1.1 SPI硬件接口与连线1.2 SPI传输协议1.3 SPI的数据传输 2. W25Q1282.1 片选2.2 控制指令2.3 时序图分析 3. STM32CubeMX配置3.1 引脚配置3.2 时钟配置3.3 SPI配置3.4 工程配置 4. 代码编写4.1读ID函数 总结 前言 最近使用通信比较多,包含…

多仓库手机端erp进销存pc/h5开源版开发

多仓库手机端erp进销存pc/h5开源版开发 以下是多仓库手机端ERP进销存PC/H5的功能列表: 仓库管理:包括仓库的新增、编辑、删除、查询等功能,可以管理多个仓库的库存情况。 商品管理:可以对商品进行新增、编辑、删除、查询等操作&a…

【JavaSE】面向对象之多态

文章目录 多态的概念多态实现条件重写向上转型和向下转型向上转型向下转型 避免在构造方法中调用重写的方法 多态的概念 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 多态实现条件 必须要…

通过LD_PRELOAD绕过disable_functions

LD_PRELOAD 在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态…

PANGOLIN写字

效果: 代码: #include <iostream> #include <pangolin/pangolin.h>// pangolin 绘制文字demousing namespace std;int main() {//创建一个窗口pangolin::CreateWindowAndBind("PangolinShowText", 640, 480);// 定义字体pangolin::GlFont * text_font …

⛳ TCP 协议详解

目录 ⛳ TCP 协议详解&#x1f3a8; 一、TCP / IP 协议的分层模型&#x1f3d3; 1.1、应用层&#x1f9f8; 1.2、传输层&#x1f52e; 1.3、网络层&#x1f3af; 1.4、链路层 &#x1f3ed; 二、HTTP 报文传输原理&#x1f945; 2.1、HTTP 报文传输&#x1f48e; 2.2、封装和分…

【Linux取经路】解析环境变量,提升系统控制力

文章目录 一、进程优先级1.1 什么是优先级&#xff1f;1.2 为什么会有优先级&#xff1f;1.3 小结 二、Linux系统中的优先级2.1 查看进程优先级2.2 PRI and NI2.3 修改进程优先级2.4 进程优先级的实现原理2.5 一些名词解释 三、环境变量3.1 基本概念3.2 PATH&#xff1a;Linux系…

操作系统练习:在Linux上创建进程,及查看进程状态

说明 进程在执行过程中可以创建多个新的进程。创建进程称为“父进程”&#xff0c;新的进程称为“子进程”。每个新的进程可以再创建其他进程&#xff0c;从而形成进程树。 每个进程都有一个唯一的进程标识符&#xff08;process identifier&#xff0c;pid&#xff09;。在L…

games101-windows环境配置(CMake+vcpkg+VS2019)

下载工具 安装CMake 安装vcpkg 安装vs2019 安装 eigen3 opencv 在vcpkg安装目录下&#xff0c;使用Windows Power Shell运行下面脚本 .\vcpkg.exe install eigen3:x64-windows .\vcpkg.exe install opencv:x64-windows安装过程中可能会用红色字体提示&#xff1a;Failed to…

七夕前的爱心代码!

话不多说上代码&#xff01; import turtle as tu import random as ratu.setup(1.0, 1.0) tu.screensize(1.0, 1.0) tu.bgcolor(black) t tu.Pen() t.ht() colors [pink, hotpink, deeppink, lightpink, red, purple, violet, magenta]def draw_star(x, y, size, color):t.…

二、Kafka快速入门

目录 2.1 安装部署1、【单机部署】2、【集群部署】 2.2 Kafka命令行操作1、查看topic相关命令参数2、查看当前kafka服务器中的所有Topic3、创建 first topic4、查看 first 主题的详情5、修改分区数&#xff08;注意&#xff1a;分区数只能增加&#xff0c;不能减少&#xff09;…

msvcr120.dll丢失有哪些简单的恢复方法?

在日常使用计算机的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;比如系统崩溃、程序无法运行等。最近&#xff0c;我在使用一些软件时遇到了一个问题&#xff1a;程序无法正常运行&#xff0c;提示找不到msvcr120.dll文件。经过一番查找和尝试&#xff0c;我终于找到…

查询投稿期刊的好用网址

网址 搞科研&#xff1a;查询SCI期刊的ISSN、期刊名称、大类分区、影响因子 http://www.gaokeyan.com/journal/index.php Letpub&#xff1a;查询期刊详细信息 https://www.letpub.com.cn/index.php?pagejournalapp 小木虫&#xff1a;查询期刊的评价 http://muchong.com/…

基于小程序的汽车俱乐部系统的设计与实现(论文+源码)_kaic

目录 前 言 1 系统概述 1.1 系统主要功能 1.2 开发及运行环境 2 系统分析和总体设计 2.1 需求分析 2.2 可行性分析 2.3 设计目标 2.4 项目规划 2.5 系统开发语言简介 2.6 系统功能模块图 3 系统数据库设计 3.1 数据库开发工具简介 3.2 数据库需求分析 3.3 数据库…

防火墙firewall

一、什么是防火墙 二、iptables 1、iptables介绍 2、实验 138的已经被拒绝&#xff0c;1可以 三、firewalld 1、firewalld简介 关闭iptables&#xff0c;开启firewalld&#xff0c;curl不能使用&#xff0c;远程连接ssh可以使用 添加80端口 这样写也可以&#xff1a;添加http…