Hive SQL必刷练习题:留存率问题(*****)
留存率:
首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存
今日留存率 = (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100%
解决思路:
这类问题主要借助left join,根据原表的数据,先去找到每个用户最先登录的时间,这个就是通过对用户group by,然后搜索date_format(min(login_ts),‘yyyy-MM-dd’)。这样就得到一个表,第一列是用户id,第二列就是每一个用户第一次登录的日期。
之后用这个新表,left join原表数据,但是这个条件不仅是id相等,还要有个t1.user_id=t2.user_id and datediff(date_format(t2.login_ts,‘yyyy-MM-dd’),t1.first_login)=1
说实话,这个多条件join的还确实没遇到过。这样符合条件的就会被增加到后面,不符合的赋空值。【当然也可以不多条件join,直接就是两个表的user_id一样,那这样再计算新增人数和留存人数的时候,就不能直接通过count(列名字)来计算了,还需要去重和判断天数关系】比如下图这样
这样就可以根据first_login分组group by计算count(t1.id),就是每日新增人数,然后count(连接上的表的列信息),就是后续一天也登陆的人数。
代码:
selectt3.first_login,t3.register,t3.remain_1/t3.register retention
from(selectt1.first_login,count(t1.user_id) register,count(t2.user_id) remain_1from(selectuser_id,date_format(min(login_ts),'yyyy-MM-dd') first_loginfromuser_login_detailgroup byuser_id)t1left joinuser_login_detail t2ont1.user_id=t2.user_id and datediff(date_format(t2.login_ts,'yyyy-MM-dd'),t1.first_login)=1group byt1.first_login
)t3
总结一下:
其实这类问题的关键在于,你要想办法将每个用户的最初登录时间和第二天登录时间这两个信息,放到一行中。这就是先求出来初次登陆时间后,然后借助这个表进行left join,之后再此基础上以最初登录时间进行分组group by,再用聚合函数即可。
但是还有一种思路,就是直接进行开窗排序,然后用row_number排序,找到前两名的日期,这个用where筛选,并且在查询条件里面用max,和min聚合函数可以找到首日和第二日,第一个日期就是首日,第二个就是第二次登录日期,只要看这个第二次登录日期是不是首日的第二天就行
上代码:
SELECTconcat(round(sum(if(datediff(f2, f1) = 1, 1, 0)) / count(*) * 100, 1), '%') percentage -- 注意round保留一位小数的用法
from(
selectuser_id,min(create_date) f1,max(create_date) f2from(
SELECTuser_id,create_date,row_number() over(partition by user_id order by create_date) num
from(selectuser_id,create_dateFROM order_infogroup by user_id,create_date
)t1)t2where num<=2group by user_id
)t3
相关文章:

Hive SQL必刷练习题:留存率问题(*****)
留存率: 首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 (今日登录且明天也登录的用户数) / 今日登录的总…...
在Linux/Ubuntu/Debian中创建自己的命令快捷方式
虽然图标快捷方式使你移动鼠标双击就打开目标,但是你还是需要先定位到它。而在终端Terminal中你只需要输入一个自定义命令就能一步到位。 要在 Ubuntu 中创建你自己的命令或别名,你可以使用主目录中的“.bashrc”文件。 以下是创建通过 Wine 运行 Photo…...
vue学习笔记——Vue3循环生成表单时,对每一行新生成的数据添加表单验证的方法
应用场景: 在form表单内,动态生成一个数组类型的一组数据,要求对生成的每一组数据内容进行表单验证。例如动态添加人员,并对每个人的人员的信息输入框进行表单验证。 解决思路: 把rules的验证规则循环写在element ui的…...
用C++做一个植物大战僵尸
制作一个完整的“植物大战僵尸”游戏是一个非常大的项目,涉及图形渲染、碰撞检测、用户输入处理、音效、动画、游戏逻辑等多个方面。由于这个话题非常广泛,我可以提供一个简化的版本或者一个框架来启动你的项目。 以下是一个简化的框架,帮助…...

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(三)—— 随机梯度下降
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 这篇文章中,咱们将使用Keras和TensorFlow…...
普通用户无法连接到docker服务
环境 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy问题 tt:~$ sudo apt install docker.io -ytt:~$ docker info Client:Version: 24.0.5Context: d…...
Rancher(v2.6.3)——Rancher部署Nginx(单机版)
Rancher部署Nginx详细说明文档:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#5rancher%E9%83%A8%E7%BD%B2nacos ps:如果觉得作者写的还行,能够满足您的需求&#x…...
java问题解释
问题1:请解释Java中的异常处理机制,并讨论其在软件开发中的重要性。 回答: Java中的异常处理机制是一种强制性的错误处理机制,它允许程序在运行时检测到异常情况,并采取适当的措施进行处理。异常是在程序执行过程中发…...

TSN协议原理!看完这一篇就够了(1)——时钟同步IEEE802.1AS-2020
▎前言 在许多应用场景中,一个本地局域网中互联的设备集群需要共享同一个时间,以支持各设备的协同工作。例如:音频设备与视频设备的配合播放,雷达与摄像头的数据融合等;这样一个看似简单的域功能,细化成为…...

Intel被喷惨的大小核CPU终于有救,12、13代也沾了光
2021年 Intel 将混合架构引入 PC ,至今也没能让所有用户接受这一改动。 虽然 PE 核心设计 帮助我们更好理解鸡兔同笼问题 带来了额外的多线程性能提升,但对于游戏玩家们可就不那么友好了。 关了吧觉得亏,不关吧又要时不时担心大核偷懒、小核…...

JAVA入门第一步
学习总结: 打开CMD常见的CMD命令 一、打开CMD CMD的概念 CMD是Windows操作系统中的命令提示符(Command Prompt)程序,它是一种命令行工具,可以让用户通过键入命令来与计算机进行交互。CMD是Windows中一个基本的系统组件,它提供了一…...

【scala】使用gradle和scala构建springboot程序
零、版本说明: springboot: 2.7.18 使用log4j2,不使用springboot自带的logback scala版本:2.11 jackson版本:2.16.0 一、依赖: buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("…...
Linux sfdisk命令教程:硬盘分区表编辑器(附实例详解和注意事项)
Linux sfdisk命令介绍 sfdisk是一个用于编辑硬盘分区表的命令。它与fdisk和cfdisk类似,但具有更多的功能。此外,与这两个程序不同,sfdisk可以非交互式地运行。它通常用于从脚本中对驱动器进行分区,或用于分区表的备份和恢复。 L…...

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例
文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…...

算法打卡day23|回溯法篇03|Leetcode 39. 组合总和、40.组合总和II、131.分割回文串
算法题 Leetcode 39. 组合总和 题目链接:39. 组合总和 大佬视频讲解:组合总和视频讲解 个人思路 这道组合题主要是有总和的限制,当递归和超过了总和就return,递归时加上回溯去遍历数组。 解法 回溯法 把组合问题抽象为如下树形结构 如上…...

Google研究者们提出了VLOGGER模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
Python从入门到精通秘籍十九
一、Python之union 联合类型注释 当谈论Python中的联合类型注释时,通常会提到Union类型。Union是typing模块中定义的一个泛型类,用于表示多个可能的类型。 Union的语法如下: Union[type1, type2, ...]其中type1, type2, … 是要组成联合类…...

解决:您还有0天的时间继续使用internet download manager
通过修改注册表来白嫖的IDM方法 1、新建txt文件复制代码(命名为idm.reg) 2、代码如下 Windows Registry Editor Version 5.00[-HKEY_CURRENT_USER\Software\Classes\CLSID\{7B8E9164-324D-4A2E-A46D-0165FB2000EC}] [-HKEY_CURRENT_USER\Software\Clas…...
操作系统目录
北航操作系统 chapter 1 北航操作系统 chapter3-1 内存管理 北航操作系统chapter3-2 内存管理 北航操作系统chapter3-3 页式管理 北航操作系统chapter3-4 段式管理 北航操作系统chapter3-5 虚拟内存管理 操作系统chapter4-1 进程与线程 北航操作系统-chapter4.2 同步与互斥…...
常用的Node.js命令集锦
当使用Node.js开发时,以下是一些常用的Node.js命令集锦: npm init 用于初始化一个新的Node.js项目,并创建一个package.json文件来管理项目的依赖和元数据。 npm install [package-name] 用于安装指定的Node.js包,可以通过--save选…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...