Skip to content

task: #3497 #69

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ Useful for preparing for technical interviews and improving your SQL skills.
- [1907. Count Salary Categories](./leetcode/medium/1907.%20Count%20Salary%20Categories.sql)
- [1934. Confirmation Rate](./leetcode/medium/1934.%20Confirmation%20Rate.sql)
- [3475. DNA Pattern Recognition](./leetcode/medium/3475.%20DNA%20Pattern%20Recognition.sql)
- [3497. Analyze Subscription Conversion](./leetcode/medium/3497.%20Analyze%20Subscription%20Conversion.sql)
3. [Hard](./leetcode/hard/)
- [185. Department Top Three Salaries](./leetcode/hard/185.%20Department%20Top%20Three%20Salaries.sql)
- [3374. First Letter Capitalization II](./leetcode/hard/3374.%20First%20Letter%20Capitalization%20II.sql)
Expand Down
56 changes: 56 additions & 0 deletions leetcode/medium/3497. Analyze Subscription Conversion.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
Question 3497. Analyze Subscription Conversion
Link: https://leetcode.com/problems/analyze-subscription-conversion/description/?envType=problem-list-v2&envId=database

Table: UserActivity

+------------------+---------+
| Column Name | Type |
+------------------+---------+
| user_id | int |
| activity_date | date |
| activity_type | varchar |
| activity_duration| int |
+------------------+---------+
(user_id, activity_date, activity_type) is the unique key for this table.
activity_type is one of ('free_trial', 'paid', 'cancelled').
activity_duration is the number of minutes the user spent on the platform that day.
Each row represents a user's activity on a specific date.
A subscription service wants to analyze user behavior patterns. The company offers a 7-day free trial, after which users can subscribe to a paid plan or cancel. Write a solution to:

Find users who converted from free trial to paid subscription
Calculate each user's average daily activity duration during their free trial period (rounded to 2 decimal places)
Calculate each user's average daily activity duration during their paid subscription period (rounded to 2 decimal places)
Return the result table ordered by user_id in ascending order.
*/

WITH trial_durations AS (
SELECT
user_id,
AVG(activity_duration) AS trial_avg_duration
FROM UserActivity
WHERE activity_type = 'free_trial'
GROUP BY user_id
),

paid_duration AS (
SELECT
user_id,
AVG(activity_duration) AS paid_avg_duration
FROM UserActivity
WHERE activity_type = 'paid'
GROUP BY user_id
)

SELECT DISTINCT
u.user_id,
ROUND(t.trial_avg_duration, 2) AS trial_avg_duration,
ROUND(p.paid_avg_duration, 2) AS paid_avg_duration
FROM UserActivity AS u
INNER JOIN
trial_durations AS t
ON u.user_id = t.user_id
INNER JOIN
paid_duration AS p
ON u.user_id = p.user_id