力扣550 游戏玩法分析 IV

目录

题目描述

思路整理

1. 首次登录日期

2. 第二天登录

3. 计算比率

实现思路

完整代码及解释


题目描述

Table: Activity

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

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

结果格式如下所示:

示例 1:

输入:
Activity table:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1         | 2         | 2016-03-01 | 5            |
| 1         | 2         | 2016-03-02 | 6            |
| 2         | 3         | 2017-06-25 | 1            |
| 3         | 1         | 2016-03-02 | 0            |
| 3         | 4         | 2018-07-03 | 5            |
+-----------+-----------+------------+--------------+
输出:
+-----------+
| fraction  |
+-----------+
| 0.33      |
+-----------+
解释:
只有 ID 为 1 的玩家在第一天登录后才重新登录,所以答案是 1/3 = 0.33

思路整理

1. 首次登录日期

首先,我们需要找到每位玩家的首次登录日期。这可以通过对每个 player_idevent_date 进行分组并选择最小的日期来实现。

2. 第二天登录

然后,我们需要找出那些在首次登录之后的第二天也有登录记录的玩家。这可以通过检查每位玩家的登录记录,看看是否存在一个登录日期正好是首次登录日期后一天的记录。

3. 计算比率

最后,我们计算符合第二天登录条件的玩家数量,然后除以总的独特玩家数量,得到所需的比率。

实现思路

为了实现上述步骤,我们可以使用以下策略:

  1. 子查询/CTE:首先通过一个子查询或CTE(公共表表达式)来确定每位玩家的首次登录日期。
  2. 关联查询:然后将原始 Activity 表与上述结果进行关联,以找出那些在首次登录后第二天有登录记录的玩家。
  3. 聚合和计算:通过聚合函数计算符合条件的玩家数量,再除以总的独特玩家数量,最后使用 ROUND 函数格式化结果。

完整代码及解释

WITH FirstLogin AS (SELECT player_id, MIN(event_date) AS first_login_dateFROM ActivityGROUP BY player_id
)SELECT ROUND(COUNT(DISTINCT a.player_id) / (SELECT COUNT(DISTINCT player_id) FROM Activity), 2
) AS fraction
FROM Activity a
JOIN FirstLogin fl ON a.player_id = fl.player_id
WHERE a.event_date = DATE_ADD(fl.first_login_date, INTERVAL 1 DAY);

通过

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

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

相关文章

117.移除链表元素(力扣)

题目描述 代码解决 class Solution { public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head!NULL&&head->valval){ListNode*tmphead;headhead->next;delete tmp;}//删除非头节点ListNode*curhead;while(cur!NULL&&cur-&g…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

Vue.js 实用技巧:深入理解 Vue.set 方法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

20 个不同的 Python 函数实例

Python 是一种广泛使用的高级编程语言,其函数是 Python 编程中至关重要的概念之一。函数是一段可以重复使用的代码块,可以接收输入参数并返回输出结果。使用函数能够提高代码的可读性、可维护性和重用性。 基础知识 在 Python 中,函数使用关…

【如何在Docker中,修改已经挂载的卷(Volume)】

曾梦想执剑走天涯,我是程序猿【AK】 提示:添加投票!!! 目录 简述概要知识图谱 简述概要 如何在Docker中,修改已经挂载的卷(Volume) 知识图谱 在Docker中,修改已经挂载…

本地navicate连接vm虚拟机中的mysql5.7docker容器

一,配置 前提是我已经启动的mysql5.7容器 使用 docker ps -a 查看所有的容器 使用 docker exec -it c4f9 bash 进入mysql命令行,注意这个c4f9是容器唯一id,不用写全连接mysql mysql -uroot -p123456,连接成功后 输入 show datab…

蓝桥杯——123

123 二分等差数列求和前缀和数组 题目分析 连续一段的和我们想到了前缀和,但是这里的l和r的范围为1e12,明显不能用O(n)的时间复杂度去求前缀和。那么我们开始观察序列的特点,可以按照等差数列对序列进行分块。如上图,在求前10个…

当代体育科技期刊投稿邮箱

《当代体育科技》杂志是由国家新闻出版总署批准的正规体育类学术期刊,刊登国内外体育科技领域的新技术、新成果,介绍体育运动项目新的训练方法、动态和发展趋势,宣传科学技术在体育行业中的应用,促进我国体育科技事业的发展。适用…

【笔记版】docker常用指令---systemctl类、docker状态

systemctl [options] docker 启动:system start docker查看状态:systemctl status docker停止:systemctl stop docker有警告:service关闭了,但是docker.socket仍响应解决方法:systemctl stop docker.socket…

springboot2入门到实战-数据库缓存同步框架canal

canal框架 canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trig…

【sgCollapseBtn】自定义组件:底部折叠/展开按钮

特性&#xff1a; 支持自定义折叠状态支持自定义标签名称 sgCollapseBtn源码 <template><div :class"$options.name" click"show !show" :placement"placement"><div class"collapse-btns"><div class"c…

嵌入式中volatile关键字的使用方法

Hi,大家好&#xff01; 今天我们来学习一下volatile关键字&#xff0c;volatile关键字想必大家在平时编程中都见过或用过。可是小伙伴们有没有想过什么时候需要使用volatile关键字吗&#xff1f; 在C语言中&#xff0c;volatile是一个关键字&#xff0c;用于告诉编译器不要优化…

Java 打包 SpringBoot 项目报错

Java 打包 SpringBoot 项目报错 问题重现 Please refer to xxxx for the individual test results. Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. 解决问题 在 pom.xml 的 <properties> 中添加项目代码 <s…

QUIC来了!

什么是QUIC QUIC&#xff0c;快速UDP网络连接(Quick UDP Internet Connection)的简称&#xff0c;即RFC文档描述它为一个面向连接的安全通用传输协议。其基于UDP协议实现了可靠传输及拥塞控制&#xff0c;简单来说&#xff0c;QUIC TCP TLS。 为什么有了QUIC HTTP2.0为了为了…

MySQL 的备份方式

MySQL 的备份方式 1. 逻辑备份 逻辑备份是指将数据库中的数据导出为可读的 SQL 语句&#xff0c;通过这些语句可以还原数据库的结构和数据。 使用 mysqldump 工具进行逻辑备份 - **命令示例&#xff1a;**mysqldump -u [username] -p [database_name] > backup_file.sql- …

Spring中的数据校验---JSR303

介绍–什么是JSR303 JSR 303是Java中的一项规范&#xff0c;用于定义在Java应用程序中执行数据校验的元数据模型和API。JSR 303的官方名称是"Bean Validation"&#xff0c;它提供了一种在Java对象级别上执行验证的方式&#xff0c;通常用于确保输入数据的完整性和准…

飞链云共创伙伴亮相温州大学,全国首个AIGC大学俱乐部成立!

在这个充满创新活力的时代&#xff0c;我们见证了一个又一个里程碑式的事件。3月3日&#xff0c;温州大学AIGC俱乐部的成立仪式盛大举行&#xff0c;这标志着全国首个AIGC大学俱乐部的诞生。更让人激动的是&#xff0c;飞链云AI共创伙伴——应流&#xff08;广州&#xff09;科…

PFA晶圆夹在半导体芯片制造中的应用

随着半导体技术的不断进步&#xff0c;晶圆制造作为集成电路产业的核心环节&#xff0c;对生产过程的精密性和洁净度要求日益提高。在众多晶圆制造工具中&#xff0c;PFA&#xff08;全氟烷氧基&#xff09;晶圆夹以其独特的材质和性能&#xff0c;在近年来逐渐受到业界的广泛关…

【Datawhale组队学习:Sora原理与技术实战】AIGC技术基础知识

AIGC是什么 AIGC全称叫做AI generated content&#xff0c;AlGC (Al-Generated Content&#xff0c;人工智能生产内容)&#xff0c;是利用AlI自动生产内容的生产方式。 在传统的内容创作领域中&#xff0c;PGC&#xff08;Professionally-generated Content&#xff0c;专业生…

Untiy 使用AVProVideo插件获取视频的长度

AVPro Video是Unity中一个非常流行的视频插件&#xff0c;可在Unity项目中实现高性能的视频播放功能&#xff0c;功能强大且易用。 如图所示&#xff0c;如果我要获取该视频的长度&#xff0c;方法是很简单的。 1、创建一个测试脚本&#xff1a; using RenderHeads.Media.AVP…