LeetCode--534. 游戏玩法分析 III

news2024/12/25 12:40:07

文章目录

  • 1 题目描述
    • 1.1 测试用例
  • 2 解题思路
    • 2.1 解法 1: group by + join
    • 2.2 解法 2: sum() over()

1 题目描述

表:Activity

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+

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

编写一个解决方案, 同时报告每组玩家和日期, 以及玩家到 目前为止 玩了多少游戏, 也就是说, 玩家在该日期之前所玩的游戏总数, 详细情况请查看示例

任意顺序 返回结果表

1.1 测试用例

示例 1:
输入:

Activity table:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1         | 2         | 2016-03-01 | 5            |
| 1         | 2         | 2016-05-02 | 6            |
| 1         | 3         | 2017-06-25 | 1            |
| 3         | 1         | 2016-03-02 | 0            |
| 3         | 4         | 2018-07-03 | 5            |
+-----------+-----------+------------+--------------+

输出:

+-----------+------------+---------------------+
| player_id | event_date | games_played_so_far |
+-----------+------------+---------------------+
| 1         | 2016-03-01 | 5                   |
| 1         | 2016-05-02 | 11                  |
| 1         | 2017-06-25 | 12                  |
| 3         | 2016-03-02 | 0                   |
| 3         | 2018-07-03 | 5                   |
+-----------+------------+---------------------+

解释:
对于 ID 为 1 的玩家, 2016-05-02 共玩了 5+6=11 个游戏, 2017-06-25 共玩了 5+6+1=12 个游戏
对于 ID 为 3 的玩家, 2018-07-03 共玩了 0+5=5 个游戏
请注意, 对于每个玩家, 我们只关心玩家的登录日期

2 解题思路

2.1 解法 1: group by + join

题目要求: 按照 玩家和日期 统计到目前为止玩了多少游戏, 马上想到 group by player_id, event_date
问题点: 如何统计当前日期及之前的游戏数量总和
Activity a 关联 Activity b, b 负责group by, 查询玩家 和 日期数据, a 负责统计 当前日期及之前游戏数量总和
image.png
b 表每一个 event_date 对应 a 表 event_date 日期及之前的数据记录

player_id = 1
event_date = 2016-03-01 时,  a 表存在 1 条记录
event_date = 2016-05-02 时,  a 表存在 2 条记录
event_date = 2017-06-25 时,  a 表存在 3 条记录
这样就能统计当前日期及之前游戏数量

最终 sql 实现

select b.player_id,  b.event_date,  sum(a.games_played) as games_played_so_far 
from Activity as a join Activity as b on a.player_id = b.player_id and a.event_date <= b.event_date
group by b.player_id,  b.event_date

2.2 解法 2: sum() over()

使用 sum() over() 统计数据
语法

SUM(<column>) OVER (PARTITION BY <partition_column> ORDER BY <order_column>)
  • <column> 是需要计算总和的列名
  • <partition_column> 是根据哪个列进行分区的列名
  • <order_column> 是按照哪个列进行排序的列名

SUM() OVER() 函数中, <order_column> 指定了按照哪个列进行排序, 通常情况下, 这个列是时间列, 例如上例中的 event_date 列, 由于在 SQL 中, 时间戳是按照从过去到未来递增的顺序进行排序的, 因此可以通过将 <order_column> 列进行升序排序, 来实现统计当前时间及之前的结果

在实际使用中, 使用类似于 ORDER BY event_date ASC 的排序语句, 将 event_date 列按照时间戳的升序排列, 然后使用 SUM() OVER() 函数取得该行及以前行的游戏总数, 这意味着, 对于给定的 player_id, 它会遍历整个表, 并在每一行上使用 SUM() 函数, 将该行及之前行的游戏数量加起来

select player_id,  event_date, 
sum(games_played) over(partition by player_id order by event_date) as games_played_so_far
from activity

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

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

相关文章

远程IO技术驱动:物流分拣线的高效进化

随着工业4.0概念的深入人心&#xff0c;物流行业正在经历前所未有的变革。在这个过程中&#xff0c;物流企业必须积极拥抱新技术&#xff0c;通过提升效率和提供更好的服务来实现物流全链条的信息化、智能化&#xff0c;进而提高物流效率&#xff0c;降低物流成本&#xff0c;以…

Java 中的简单文本编辑器源代码

文章目录 前言简单文本编辑器 源代码基本信息关于Simple Text EditorJava 中的简单文本编辑器免费源代码特征应用程序屏幕截图源代码安装指南 前言 Java 中的简单文本编辑器是用 Java 编程语言编码的桌面应用程序。该项目使用一个简单的函数来制作文本编辑器应用程序。这个项目…

Hazelcast IMDG 概览

数新网络-让每个人享受数据的价值https://www.datacyber.com/ 一、简介 Hazelcast IMDG&#xff08;in-memory data grid&#xff09;是开源的、分布式高可用的、开箱即用的、云原生的内存数据网格&#xff0c;可用作开箱即用的数据和计算平台&#xff0c;或用作自己的云原生应…

17、SpringCloud -- natapp 内网穿透

目录 natapp什么是内网穿透?为什么要用natapp?安装、配置:下载隧道:配置启动:访问:natapp官网 natapp 什么是内网穿透? 为什么要用natapp? 安装、配置:

[毕设记录]@学术技能积累:zotero、readpaper 引用功能使用

文章目录 zoteroreadpaper 开题要在word里插入文献引用&#xff0c;zotero和readpaper在浏览器和word都有插件&#xff0c;比较好用 zotero Zotero 是一个免费、开源的参考文献管理软件&#xff0c;可以帮助用户收集、整理和引用文献。它支持多种操作系统&#xff0c;包括 Wind…

数字时代的文化探险,拓世AI文生图解锁千年古典画作宝库

中华古典绘画&#xff0c;既有磅礴的山河之气势&#xff0c;又有细腻至微的尘芥之美。这些画作&#xff0c;如同时间的印记&#xff0c;见证了华夏千年的文明与变迁。这里面的“中国十大传世名画”更是被誉为文明的瑰宝。可是&#xff0c;历史的风云变幻&#xff0c;使得一些名…

AI时代产品经理升级之道

1.产品管理新模式&#xff1a;让产品管理更高效、更快捷、更完美。 2.全流程解析&#xff1a;涵盖产品管理的不同应用场景&#xff0c;介绍从编写各种文档&#xff0c;到竞品分析与市场调研、需求管理、原型设计&#xff0c;再到产品发布与运营、维护与支持等关键环节。 3.实战…

游戏在小米设备上因自适应刷新率功能,帧率减半

1&#xff09;游戏在小米设备上因自适应刷新率功能&#xff0c;帧率减半 2&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 3&#xff09;如何在Unity中实现液体蔓延的效果 这是第357篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&…

发布一站式反电诈工具,合合信息商业大数据技术助力银行守护群众“钱袋子”

近期&#xff0c;电影《孤注一掷》在社交媒体上引起了广泛的讨论&#xff0c;社会各界对于电信网络诈骗案件的关注度日益提升。真实世界中的电诈涉及金额之大、团伙成员之多&#xff0c;往往比电影更甚。为此&#xff0c;国家不断加大对电信诈骗的打击力度&#xff0c;出台《反…

【RTOS学习】CubeMX对FreeRTOS的适配

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 经过前面的学习&#xff0c;现在我已经对FreeRTOS有了一个初步的认识&#xff0c;而且也可以使用F…

AI最终会是恐怖的制造者?原来OpenAI早已预言

原创 | 文 BFT机器人 不知道大家最近有没有关注美国电影&#xff0c;有一部关于人工智能反抗人类统治的名为《AI创始者》科幻电影即将在美国好莱坞上映&#xff0c;该电影讲述的是一个原本为人类服务的人工智能&#xff0c;有了自主意识&#xff0c;开始反抗人类的统治&#x…

2023年双11腾讯云优惠活动整理汇总

2023年双11购物狂欢节将至&#xff0c;腾讯云推出了11.11大促优惠活动&#xff0c;免费领取9999元代金券礼包&#xff1b;云服务器、云数据库、COS等上云必备产品&#xff0c;低至1.8折起&#xff1b;云产品助力企业和开发者轻松上云&#xff01; 一、腾讯云双11活动地址 活动…

远程IO:实现立体车库高效运营的秘密武器

随着城市的发展&#xff0c;车辆无处停放的问题变得越来越突出。为了解决这个问题&#xff0c;立体车库应运而生。立体车库具有立体空间利用率高、存取车方便、安全可靠等优点&#xff0c;成为现代城市停车的重要解决方案。 立体车库控制系统介绍 在立体车库中&#xff0c;控制…

java解决修改图片尺寸,压缩图片后出现背景变黑,图片字体模糊问题

将以下数学公式的图片使用Hutool提供的图片工具类改变尺寸 代码如下: package com.jason.common.file.word;import cn.hutool.core.img.ImgUtil; import cn.hutool.core.io.FileUtil;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage;…

数字化时代,谈谈无处不在的大数据和商业智能BI的关系

随着数字化时代的正式到来&#xff0c;众多领域开展了新一轮的科技革命和产业革命&#xff0c;通过大数据或商业智能BI等数据类技术解决方案&#xff0c;完成了从业务、产品到经营模式、管理决策的全方位升级&#xff0c;获得了突破性的成长。 如今&#xff0c;大数据和商业智…

数字孪生技术与VR:创造数字未来

在当今数字化浪潮中&#xff0c;数字孪生和虚拟现实&#xff08;VR&#xff09;技术是两大亮点&#xff0c;它们以独特的方式相互结合&#xff0c;为各个领域带来了创新和无限可能。本篇文章将探讨数字孪生与VR之间的关系&#xff0c;以及它们如何共同开辟未来的新前景。 数字…

C语言数组首地址学习1

C语言数组名也是数组首地址&#xff1b;数组首地址&#xff0c;也就是数组首元素地址&#xff1b; 数组首地址也可以用第0个元素加&表示&#xff0c;数值a的首地址是&a[0]&#xff1b; #include <stdio.h> int main(){int nums[5];int i;//从控制台读取用户输…

408-2017

一、单项选择题 1.下列函数的时间复杂度是______. int func(int n){int i0,sum0;while(sum<n){sumi;}return i; } A.O(log n) B.O(n^1/2) C.O(n) D.O(nlog n) 解答&#xff1a;B 循环里面的内容为 1~x 求和&#xff0c;求和结果为 sum(1x)x/2&…

C#__对Json文件的解析和序列化

Json: 存储和交换文本信息的语法。&#xff08;类似XML&#xff0c;语法独立&#xff09; 一种轻量级的数据交换格式。&#xff08;更小&#xff0c;更快&#xff0c;更易解析&#xff09; 语法规则: 数据在键值对里面&#xff0c;数据由逗号分隔开。 …

《研发效能(DevOps)工程师》课程简介(一)丨IDCF

为贯彻落实《关于深化人才发展体制机制改革的意见》&#xff0c;推动实施人才强国战略&#xff0c;促进专业技术人员提升职业素养、补充新知识新技能&#xff0c;实现人力资源深度开发&#xff0c;推动经济社会全面发展&#xff0c;根据《中华人民共和国劳动法》有关规定&#…