mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-07 00:11:41 +08:00
118 lines
4.9 KiB
HTML
118 lines
4.9 KiB
HTML
<p>表:<code>UserActivity</code></p>
|
||
|
||
<pre>
|
||
+------------------+---------+
|
||
| 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 是用户当天在平台上花费的分钟数。
|
||
每一行表示一个用户在特定日期的活动。
|
||
</pre>
|
||
|
||
<p>订阅服务想要分析用户行为模式。公司提供7天免费试用,试用结束后,用户可以选择订阅 <strong>付费计划</strong> 或 <strong>取消</strong>。编写解决方案:</p>
|
||
|
||
<ol>
|
||
<li>查找从免费试用转为付费订阅的用户</li>
|
||
<li>计算每位用户在 <strong>免费试用</strong> 期间的 <strong>平均每日活动时长</strong>(四舍五入至小数点后 <code>2</code> 位)</li>
|
||
<li>计算每位用户在 <strong>付费</strong> 订阅期间的 <strong>平均每日活动时长</strong>(四舍五入到小数点后 <code>2</code> 位)</li>
|
||
</ol>
|
||
|
||
<p>返回结果表以<em> </em><code>user_id</code><em> </em><strong>升序 </strong>排序。</p>
|
||
|
||
<p>结果格式如下所示。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong class="example">示例:</strong></p>
|
||
|
||
<div class="example-block">
|
||
<p><strong>输入:</strong></p>
|
||
|
||
<p>UserActivity 表:</p>
|
||
|
||
<pre class="example-io">
|
||
+---------+---------------+---------------+-------------------+
|
||
| 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 |
|
||
+---------+---------------+---------------+-------------------+
|
||
</pre>
|
||
|
||
<p><strong>输出:</strong></p>
|
||
|
||
<pre class="example-io">
|
||
+---------+--------------------+-------------------+
|
||
| user_id | trial_avg_duration | paid_avg_duration |
|
||
+---------+--------------------+-------------------+
|
||
| 1 | 45.00 | 76.67 |
|
||
| 3 | 70.00 | 63.33 |
|
||
| 4 | 37.50 | 45.00 |
|
||
+---------+--------------------+-------------------+
|
||
</pre>
|
||
|
||
<p><strong>解释:</strong></p>
|
||
|
||
<ul>
|
||
<li><strong>用户 1:</strong>
|
||
|
||
<ul>
|
||
<li>体验了 3 天免费试用,时长分别为 45,30 和 60 分钟。</li>
|
||
<li>平均试用时长:(45 + 30 + 60) / 3 = 45.00 分钟。</li>
|
||
<li>拥有 3 天付费订阅,时长分别为 75,90 和 65分钟。</li>
|
||
<li>平均花费市场:(75 + 90 + 65) / 3 = 76.67 分钟。</li>
|
||
</ul>
|
||
</li>
|
||
<li><strong>用户 2:</strong>
|
||
<ul>
|
||
<li>体验了 3 天免费试用,时长分别为 55,25 和 50 分钟。</li>
|
||
<li>平均试用时长:(55 + 25 + 50) / 3 = 43.33 分钟。</li>
|
||
<li>没有转为付费订阅(只有 free_trial 和 cancelled 活动)。</li>
|
||
<li>未包含在输出中,因为他未转换为付费用户。</li>
|
||
</ul>
|
||
</li>
|
||
<li><strong>用户 3:</strong>
|
||
<ul>
|
||
<li>体验了 3 天免费试用,时长分别为 70,60 和 80 分钟。</li>
|
||
<li>平均试用时长:(70 + 60 + 80) / 3 = 70.00 分钟。</li>
|
||
<li>拥有 3 天付费订阅,时长分别为 50,55 和 85 分钟。</li>
|
||
<li>平均花费时长:(50 + 55 + 85) / 3 = 63.33 分钟。</li>
|
||
</ul>
|
||
</li>
|
||
<li><strong>用户 4:</strong>
|
||
<ul>
|
||
<li>体验了 2 天免费试用,时长分别为 40 和 35 分钟。</li>
|
||
<li>平均试用时长:(40 + 35) / 2 = 37.50 分钟。</li>
|
||
<li>在取消前有 1 天的付费订阅,时长为45分钟。</li>
|
||
<li>平均花费时长:45.00 分钟。</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<p>结果表仅包括从免费试用转为付费订阅的用户(用户 1,3 和 4),并且以 user_id 升序排序。</p>
|
||
</div>
|