当前位置: 首页 > news >正文

leetcode-sql-3497分析订阅转化

题目:

表:UserActivity

±-----------------±--------+
| Column Name | Type |
±-----------------±--------+
| user_id | int |
| activity_date | date |
| activity_type | varchar |
| activity_duration| int |
±-----------------±--------+
(user_id, activity_date, activity_type) 是这张表的唯一主键。
activity_type 是(‘free_trial’, ‘paid’, ‘cancelled’)中的一个。
activity_duration 是用户当天在平台上花费的分钟数。
每一行表示一个用户在特定日期的活动。
订阅服务想要分析用户行为模式。公司提供7天免费试用,试用结束后,用户可以选择订阅 付费计划 或 取消。编写解决方案:

查找从免费试用转为付费订阅的用户
计算每位用户在 免费试用 期间的 平均每日活动时长(四舍五入至小数点后 2 位)
计算每位用户在 付费 订阅期间的 平均每日活动时长(四舍五入到小数点后 2 位)
返回结果表以 user_id 升序 排序。

结果格式如下所示。

示例:

输入:

UserActivity 表:

±--------±--------------±--------------±------------------+
| user_id | activity_date | activity_type | activity_duration |
±--------±--------------±--------------±------------------+
| 1 | 2023-01-01 | free_trial | 45 |
| 1 | 2023-01-02 | free_trial | 30 |
| 1 | 2023-01-05 | free_trial | 60 |
| 1 | 2023-01-10 | paid | 75 |
| 1 | 2023-01-12 | paid | 90 |
| 1 | 2023-01-15 | paid | 65 |
| 2 | 2023-02-01 | free_trial | 55 |
| 2 | 2023-02-03 | free_trial | 25 |
| 2 | 2023-02-07 | free_trial | 50 |
| 2 | 2023-02-10 | cancelled | 0 |
| 3 | 2023-03-05 | free_trial | 70 |
| 3 | 2023-03-06 | free_trial | 60 |
| 3 | 2023-03-08 | free_trial | 80 |
| 3 | 2023-03-12 | paid | 50 |
| 3 | 2023-03-15 | paid | 55 |
| 3 | 2023-03-20 | paid | 85 |
| 4 | 2023-04-01 | free_trial | 40 |
| 4 | 2023-04-03 | free_trial | 35 |
| 4 | 2023-04-05 | paid | 45 |
| 4 | 2023-04-07 | cancelled | 0 |
±--------±--------------±--------------±------------------+
输出:

±--------±-------------------±------------------+
| user_id | trial_avg_duration | paid_avg_duration |
±--------±-------------------±------------------+
| 1 | 45.00 | 76.67 |
| 3 | 70.00 | 63.33 |
| 4 | 37.50 | 45.00 |
±--------±-------------------±------------------+
解释:

用户 1:
体验了 3 天免费试用,时长分别为 45,30 和 60 分钟。
平均试用时长:(45 + 30 + 60) / 3 = 45.00 分钟。
拥有 3 天付费订阅,时长分别为 75,90 和 65分钟。
平均花费时长:(75 + 90 + 65) / 3 = 76.67 分钟。
用户 2:
体验了 3 天免费试用,时长分别为 55,25 和 50 分钟。
平均试用时长:(55 + 25 + 50) / 3 = 43.33 分钟。
没有转为付费订阅(只有 free_trial 和 cancelled 活动)。
未包含在输出中,因为他未转换为付费用户。
用户 3:
体验了 3 天免费试用,时长分别为 70,60 和 80 分钟。
平均试用时长:(70 + 60 + 80) / 3 = 70.00 分钟。
拥有 3 天付费订阅,时长分别为 50,55 和 85 分钟。
平均花费时长:(50 + 55 + 85) / 3 = 63.33 分钟。
用户 4:
体验了 2 天免费试用,时长分别为 40 和 35 分钟。
平均试用时长:(40 + 35) / 2 = 37.50 分钟。
在取消前有 1 天的付费订阅,时长为45分钟。
平均花费时长:45.00 分钟。
结果表仅包括从免费试用转为付费订阅的用户(用户 1,3 和 4),并且以 user_id 升序排序。

解答:

SELECT user_id,
ROUND(AVG(IF(activity_type = 'free_trial',activity_duration,NULL)) ,2) AS trial_avg_duration,
ROUND(AVG(IF(activity_type = 'paid',activity_duration,NULL)),2) AS paid_avg_duration
FROM UserActivity
GROUP BY user_id
HAVING paid_avg_duration
http://www.lryc.cn/news/609580.html

相关文章:

  • 旧物回收小程序:开启绿色生活新篇章
  • Array容器学习
  • LeetCode 132:分割回文串 II
  • 【YOLO系列】YOLOv12详解:模型结构、损失函数、训练方法及代码实现
  • 关于Npm和Nvm的用法
  • Linux 环境 libpq加载异常导致psql 连接 PostgreSQL 库失败失败案例
  • uniapp开发微信小程序textarea在ios下有默认内边距的问题(textarea兼容问题)
  • 如何给Word和WPS文档添加密码或取消密码
  • Ethereum:拥抱开源,OpenZeppelin 未来的两大基石 Relayers 与 Monitor
  • Jwts用于创建和验证 ​​JSON Web Token(JWT)​​ 的开源库详解
  • OpenLayers 入门指南【五】:Map 容器
  • R 语言科研绘图第 67 期 --- 箱线图-显著性
  • Nestjs框架: Node.js 多环境配置策略与 dotenv 与 config 库详解
  • 政府财政行业云原生转型之路
  • Druid学习笔记 01、快速了解Druid中SqlParser实现
  • 排序算法入门:直接插入排序详解
  • 室内分布系统
  • ICCV 2025|单视频生成动态4D场景!中科大微软突破4D生成瓶颈,动画效果炸裂来袭!
  • Flutter开发 了解Scaffold
  • 深入理解Java的SPI机制,使用auto-service库优化SPI
  • 区块链基础之Merkle B+树
  • Azure DevOps - 使用 Ansible 轻松配置 Azure DevOps 代理 - 第6部分
  • 打造个人数字图书馆:LeaNote+cpolar如何成为你的私有化知识中枢?
  • 多级表头的导出
  • 软件打包前进行文件去重
  • Unix 命令行shell基础--学习系列003
  • Web 开发 12
  • 嵌入式硬件中三极管原理分析与控制详解
  • 嵌入式硬件篇---OpenMV存储
  • 单片机51 day46