问题描述
我有一个包含 3 列的表格:user_id
、start_date
、cancellation_date
我想获得 4 列:
Date
、Number of Active Users
、Number of Users Who Canceled
、Cancellation Rate
关于如何编写查询的任何想法?
提前致谢!
解决方法
以下是衡量新用户、取消用户和活跃用户的方法:
SELECT calendar_date,(SELECT COUNT(*) FROM users AS usr WHERE cal.calendar_date BETWEEN usr.start_date AND IFNULL(usr.cancellation_date,'3000-01-01')) AS active_users,(SELECT COUNT(*) FROM users AS usr WHERE usr.start_date = cal.calendar_date) AS new_users,(SELECT COUNT(*) FROM users AS usr WHERE usr.cancellation_date = cal.calendar_date) AS users_cancelled
FROM my_calendar AS cal
(假设您有包含所有日期的表“my_calendar”)
,如果我们定义active user为cancellation_date为null,查询会是这样;
SELECT
( SELECT CURDATE() ) AS `DATE`,( SELECT COUNT(*) FROM users WHERE cancellation_date IS NULL) AS `Number of active users`,( SELECT COUNT(*) FROM users WHERE cancellation_date IS NOT NULL) AS `number of users who cancelled`,( SELECT `number of users who cancelled` / (`Number of active users` + `number of users who cancelled`)) AS `cancellation rate`
在 MySQL 8 上测试,https://www.db-fiddle.com/f/6QPLn2C79rnzrfN71i1GMV/0