排名

用户解题统计

过去一年提交了

勋章 ①金银铜:在竞赛中获得第一二三名;②好习惯:自然月10天提交;③里程碑:解决1/2/5/10/20/50/100/200题;④每周打卡挑战:完成每周5题,每年1月1日清零。

收藏

收藏日期 题目名称 解决状态
2025-08-23 抖音面试真题(5)新用户的T+1月留存  未解决
2025-08-19 抖音面试真题(4)T+1月留存  已解决
2025-08-18 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2)  已解决
2025-07-28 5月3日的所有打车记录  已解决
2025-07-27 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率  已解决
2025-07-27 抖音面试真题(1)T+1日留存率  已解决
2025-07-27 高价值客户及其最常访问的商户类型  已解决
2025-07-27 按商户类型统计流失风险客户  已解决
2025-07-26 客群分布直方图  未解决
2025-07-26 找出流失风险客户(R=1且F<=2)  未解决
2025-07-23 统计每一类RFM用户的数量  未解决
2025-07-22 4分及以下客户去的最后一家餐厅  未解决
2025-07-22 9分客户最爱去的Top3餐厅  已解决
2025-07-22 比较每个月客户的拉新质量(2)  未解决
2025-07-22 比较每个月客户的拉新质量(1)  已解决
2025-07-19 基于消费天数和平均消费金额NTILE分组计算每个用户的RFM评分  已解决
2025-07-19 基于购买次数和累计购买金额计算每个用户的RFM评分  已解决
2025-07-19 基于消费天数和平均单笔购买金额计算每个用户的RFM评分  已解决
2025-07-19 计算每个用户的RFM值(1)  已解决
2025-07-17 直观对比两种频率计算的差异(F)  已解决
2025-07-17 计算每个用户的购买频率-天数(F)  已解决
2025-07-17 计算每个用户的购买频率-次数(F)  已解决
2025-07-17 计算每个用户最近一次购买日期(R)  已解决
2025-07-12 统计各省红包金额的总金额、平均数、中位数、众数、标准差以及75分位数  已解决
2025-07-11 红包金额中位数  已解决
2025-07-11 每个行业最早上市的公司  已解决
2025-07-03 表连接(3)一直使用一张表,现在开始两张表  未解决
2025-07-03 不同时段的热门搜索词  已解决
2025-07-02 找出所有以酒店为起点的类别组合的最热门路线  已解决
2025-06-29 小结(1)大数据早就能扫黄,找足证据不慌张  已解决
2025-06-29 好友步数排名-考虑反向好友关系  已解决
2025-06-29 好友步数排名-不考虑反向好友关系  已解决
2025-06-29 大结局(😊)渣男9月爽翻天,罪证送他去西天  已解决
2025-06-28 深圳气温异常年份  已解决
2025-06-27 分类别人均在线时长最火直播间  已解决
2025-06-27 分类别的最火直播间  已解决
2025-06-27 销售金额前10的商品信息(2)  已解决
2025-06-19 窗口函数(7)三天吃四餐,你特么是不是乔杉?  已解决
2025-06-19 窗口函数(6)隔三差五去召妓,统计间隔用偏移  已解决
2025-06-19 窗口函数(5)越来越喜欢召妓,窗口函数用累计(3)  已解决
2025-06-16 窗口函数(2)所有前一和每类前一,继续搞懂排序窗口函数  已解决
2025-06-16 窗口函数(1)年度前三和每月前三,搞懂排序窗口函数  已解决
2025-06-16 小结(2)越花越多是死罪,按月统计Substr  已解决
2025-06-16 时间日期(6)爽完来根事后烟,不羡鸳鸯不羡仙  已解决
2025-06-15 时间日期(5)三腿爱往会所走,全当良心喂了狗  已解决
2025-06-15 时间日期(3)按月统计日花费,一天都不要浪费  已解决
2025-06-15 时间日期(1)按月统计日花费,一天都不要浪费  已解决
2025-06-15 年花万元逛窑子,真他妈是个败家子(2)  已解决
2025-06-14 双脚踏进足浴门,从此再无心上人  已解决
2025-06-14 渣男腰子可真行,端午中秋干不停  已解决
2025-06-14 通勤、午休、临睡个时间段活跃人数分布  已解决
2025-06-14 上月活跃用户数  已解决
2025-06-14 每日新增用户  已解决
2025-06-14 冬季下雪天数  已解决
2025-06-13 多云天气天数  已解决
2025-06-13 城市平均最高气温  已解决
2025-06-13 至少两门科目大于等于110分的学生  未解决
2025-06-12 只买iPhone的用户  已解决
2025-06-12 基于共同兴趣爱好的餐厅推荐(6)-好基友(5)  已解决
2025-06-12 基于共同兴趣爱好的餐厅推荐(5)-好基友(3)  已解决
2025-06-12 基于共同兴趣爱好的餐厅推荐(4)-好基友(2)  已解决
2025-06-12 基于共同兴趣爱好的餐厅推荐(3)-好基友(1)  已解决
2025-06-08 数学成绩分段统计(3)  未解决
2025-06-08 数学成绩分段统计(2)  已解决
2025-06-08 各班第一名  已解决
2025-06-08 各商品漏斗转化率  已解决
2025-06-08 统计每个城市各状态的单量(行转列)  已解决
2025-06-08 先收藏后购买的用户数  已解决
2025-06-08 登录天数分布  未解决
2025-06-07 给商品打四类标签(列)  已解决
2025-06-07 给商品打四类标签(行)  已解决
2025-06-07 每年地产与软件服务上市公司对比  已解决
2025-06-07 一线城市历年平均气温  已解决
2025-06-07 从未被领取的优惠券  已解决
2025-06-06 拼接歌曲名和专辑名  已解决
2025-06-06 歌曲流行度分析  已解决
2025-06-06 用户听歌完成情况  已解决
2025-06-05 专辑播放量统计  已解决
2025-06-05 最受欢迎歌手  已解决
2025-06-05 用户听歌多元化标签  已解决
2025-06-05 MJ最受欢迎的歌曲  已解决
2025-06-05 周杰伦的最受欢迎的专辑  已解决
2025-06-05 计算视频的平均观看完成率  已解决
2025-06-01 各行业第一家上市公司  已解决
2025-05-31 平均分最高的班级  已解决
2025-05-31 红包发送量排名  已解决
2025-05-31 统计每个城市各状态的单量  已解决
2025-05-30 找出北京和柳州单量最多的司机  已解决
2025-05-30 窗口函数(4)越来越喜欢召妓,窗口函数用累计(2)  已解决
2025-05-29 窗口函数(3)越来越喜欢召妓,窗口函数用累计(1)  已解决
2025-05-29 时间日期(4)阶段综合-按月统计日花费,一天都不要浪费  已解决
2025-05-29 时间日期(2)按月统计日花费,一天都不要浪费  已解决
2025-05-29 表连接(5)哪些没被分出来,用左用内你来猜  已解决
2025-05-29 表连接(4)渣男把钱花在哪儿,维表可以来帮忙  已解决
2025-05-28 查询播放量为0的歌手及其专辑  已解决
2025-05-28 用户听歌习惯的时间分布  已解决
2025-05-28 找出酒店-餐饮的最热门路线  已解决
2025-05-28 查询所有以住宅区为起点且以写字楼为终点的行程  已解决
2025-05-28 查询所有起点和终点都属于餐饮类别的行程  已解决
2025-05-28 查询所有终点是餐饮类地点的行程记录  已解决
2025-05-27 曝光量最大的商品  已解决
2025-05-27 只被收藏未被购买的商品  已解决
2025-05-27 被收藏次数最多的商品  已解决
2025-05-27 不分类别的最火直播间  已解决
2025-05-26 文科潜力股  已解决
2025-05-26 找出三个班级的女生  已解决
2025-05-25 找出与y=x有交点的所有一元一次函数  已解决
2025-05-25 小结-从不缺考的学生  未解决
2025-05-25 小结-行转列,展开学生成绩(1)  已解决
2025-05-25 HAVING-语数英优异的学生  已解决
2025-05-25 HAVING-执教教师超过3人的科目  已解决
2025-05-25 HAVING-每次成绩都不低于80分的学生  已解决
2025-05-25 CASE WHEN-老中青教师数量  已解决
2025-05-25 CASE WHEN-男女学生的数量  已解决
2025-05-25 聚合函数-比较两位同学的数学成绩  已解决
2025-05-25 聚合函数-735011学生的语文成绩  已解决
2025-05-23 GROUP BY-各班级人数  已解决
2025-05-23 字符串函数-查找任教3个班级的所有教师  已解决
2025-05-23 字符串函数-查找任教5个班级的所有教师  已解决
2025-05-23 条件过滤-符合条件的班主任  已解决
2025-05-23 条件过滤-查找2009年出生的女学生  已解决
2025-05-23 数学成绩分段统计(1)  已解决
2025-05-22 化学老师的教学成果  已解决
2025-05-22 优异物理成绩的分布  已解决
2025-05-22 S1年级物理成绩前10名(2)  已解决
2025-05-22 找出与X轴交点小于等于0的一元一次函数  已解决
2025-05-21 找出与X轴交点大于0的一元一次函数  已解决
2025-05-21 找出所有一元一次函数  已解决
2025-05-21 销售金额前10的商品信息  已解决
2025-05-21 A和K之间的手牌(3)  已解决
2025-05-21 A和K之间的手牌(2)  已解决
2025-05-21 大于J小于K的手牌  已解决
2025-05-21 语文数学英语至少1门超过100分的同学  已解决
2025-05-21 性别已知的听歌用户  已解决
2025-05-21 2000年以前出生的男歌手  已解决
2025-05-20 找出所有港台歌手  已解决
2025-05-20 表连接(2)渣男去过我对象没去过,那就用LeftJoin  已解决
2025-05-19 表连接(1)你们难道都去过?那就试试用InnerJoin  已解决
2025-05-19 条件过滤(1)异地男友有异常,数分闺蜜来帮忙  已解决
2025-03-21 S1年级物理成绩前10名(1)  已解决
2025-03-19 字符串与通配符(2)好多关键词做规则,可以使用rlike  已解决
2025-03-18 分类(1)姿势太多很过分,分类要用CaseWhen  已解决
2025-03-18 分组与聚合函数(6)想知道渣男有多坏,疯狂使用GroupBy  已解决
2025-03-17 分组与聚合函数(5)想知道何时成瘾,用Max Or Min?  已解决
2025-03-17 分组与聚合函数(5)五花八门的项目,其实都有固定套路(2)  已解决
2025-03-17 分组与聚合函数(2)擦边营收怎么样,聚合函数可看出  已解决
2025-03-15 条件过滤(3)Hour函数很给力,组合条件要仔细  已解决

评论笔记

评论日期 题目名称 评论内容 站长评论
没有评论过的题目。

提交记录

提交日期 题目名称 提交代码
2025-08-23 抖音面试真题(5)新用户的T+1月留存 
WITH 
user_first_login AS (
SELECT 
usr_id,
MIN(DATE(login_time)) AS first_login_date
FROM user_login_log
WHERE login_time >= '2024-01-01' 
AND login_time < '2025-04-01'
GROUP BY usr_id
),
cohorts AS (
SELECT 
usr_id,
DATE_FORMAT(first_login_date, '%Y-%m-01') AS cohort_month
FROM user_first_login
WHERE first_login_date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY usr_id, DATE_FORMAT(first_login_date, '%Y-%m-01')
),
user_login_months AS (
SELECT 
usr_id,
DATE_FORMAT(login_time, '%Y-%m-01') AS login_month
FROM user_login_log
WHERE login_time >= '2024-01-01' 
AND login_time < '2025-04-01'
GROUP BY usr_id, DATE_FORMAT(login_time, '%Y-%m-01')
),
retention_data AS (
SELECT 
c.cohort_month,
c.usr_id,
MAX(CASE WHEN u.login_month = DATE_ADD(c.cohort_month, INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS retained_1m
FROM cohorts c
LEFT JOIN user_login_months u 
ON c.usr_id = u.usr_id
AND u.login_month IN (
DATE_ADD(c.cohort_month, INTERVAL 1 MONTH)
)
GROUP BY c.cohort_month, c.usr_id
),
retention_summary AS (
SELECT 
cohort_month,
COUNT(usr_id) AS total_users,
SUM(retained_1m) AS retained_1m_count
FROM retention_data
GROUP BY cohort_month
),
final_table AS (
SELECT 
cohort_month,
total_users,
CASE WHEN LAST_DAY(DATE_ADD(cohort_month, INTERVAL 1 MONTH)) < CURRENT_DATE
 THEN ROUND(retained_1m_count * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS retention_1m_rate
FROM retention_summary
ORDER BY cohort_month
)
select 
cohort_month AS current_month,
retention_1m_rate AS t_plus_1_month_retention_rate
from final_table;
2025-08-23 抖音面试真题(4)T+1月留存 
WITH 
login_data AS (
SELECT 
usr_id,
DATE_FORMAT(login_time, '%Y-%m-01') AS login_month
FROM user_login_log
WHERE login_time >= '2024-01-01' 
AND login_time < '2025-04-01' 
GROUP BY usr_id, DATE_FORMAT(login_time, '%Y-%m-01')
),
months AS (
SELECT '2024-01-01' AS cohort_month
UNION ALL SELECT '2024-02-01'
UNION ALL SELECT '2024-03-01'
UNION ALL SELECT '2024-04-01'
UNION ALL SELECT '2024-05-01'
UNION ALL SELECT '2024-06-01'
UNION ALL SELECT '2024-07-01'
UNION ALL SELECT '2024-08-01'
UNION ALL SELECT '2024-09-01'
UNION ALL SELECT '2024-10-01'
UNION ALL SELECT '2024-11-01'
UNION ALL SELECT '2024-12-01'
),
user_active_months AS (
SELECT 
usr_id,
login_month
FROM login_data
GROUP BY usr_id, login_month
),
cohorts AS (
SELECT 
login_month AS cohort_month,
usr_id
FROM user_active_months
WHERE login_month BETWEEN '2024-01-01' AND '2024-12-01'
GROUP BY cohort_month, usr_id
),
retention_data AS (
SELECT 
c.cohort_month,
c.usr_id,
MAX(CASE WHEN u.login_month = DATE_ADD(c.cohort_month, INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS retained_1m
FROM cohorts c
LEFT JOIN user_active_months u 
ON c.usr_id = u.usr_id
AND u.login_month IN (
DATE_ADD(c.cohort_month, INTERVAL 1 MONTH)
)
GROUP BY c.cohort_month, c.usr_id
),
retention_summary AS (
SELECT 
cohort_month,
COUNT(usr_id) AS total_users,
SUM(retained_1m) AS retained_1m_count
FROM retention_data
GROUP BY cohort_month
),
final_table AS (
SELECT 
cohort_month,
total_users,
CASE WHEN LAST_DAY(DATE_ADD(cohort_month, INTERVAL 1 MONTH)) < CURRENT_DATE
 THEN ROUND(retained_1m_count * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS retention_1m_rate
FROM retention_summary
ORDER BY cohort_month
)
select 
cohort_month AS current_month,
retention_1m_rate AS t_plus_1_month_retention_rate 
FROM final_table
WHERE cohort_month != '2024-12-01';
2025-08-23 抖音面试真题(4)T+1月留存 
WITH 
login_data AS (
SELECT 
usr_id,
DATE_FORMAT(login_time, '%Y-%m-01') AS login_month
FROM user_login_log
WHERE login_time >= '2024-01-01' 
AND login_time < '2025-04-01' 
GROUP BY usr_id, DATE_FORMAT(login_time, '%Y-%m-01')
),
months AS (
SELECT '2024-01-01' AS cohort_month
UNION ALL SELECT '2024-02-01'
UNION ALL SELECT '2024-03-01'
UNION ALL SELECT '2024-04-01'
UNION ALL SELECT '2024-05-01'
UNION ALL SELECT '2024-06-01'
UNION ALL SELECT '2024-07-01'
UNION ALL SELECT '2024-08-01'
UNION ALL SELECT '2024-09-01'
UNION ALL SELECT '2024-10-01'
UNION ALL SELECT '2024-11-01'
UNION ALL SELECT '2024-12-01'
),
user_active_months AS (
SELECT 
usr_id,
login_month
FROM login_data
GROUP BY usr_id, login_month
),
cohorts AS (
SELECT 
login_month AS cohort_month,
usr_id
FROM user_active_months
WHERE login_month BETWEEN '2024-01-01' AND '2024-12-01'
GROUP BY cohort_month, usr_id
),
retention_data AS (
SELECT 
c.cohort_month,
c.usr_id,
MAX(CASE WHEN u.login_month = DATE_ADD(c.cohort_month, INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS retained_1m
FROM cohorts c
LEFT JOIN user_active_months u 
ON c.usr_id = u.usr_id
AND u.login_month IN (
DATE_ADD(c.cohort_month, INTERVAL 1 MONTH)
)
GROUP BY c.cohort_month, c.usr_id
),
retention_summary AS (
SELECT 
cohort_month,
COUNT(usr_id) AS total_users,
SUM(retained_1m) AS retained_1m_count
FROM retention_data
GROUP BY cohort_month
),
final_table AS (
SELECT 
cohort_month,
total_users,
CASE WHEN LAST_DAY(DATE_ADD(cohort_month, INTERVAL 1 MONTH)) < CURRENT_DATE
 THEN ROUND(retained_1m_count * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS retention_1m_rate
FROM retention_summary
ORDER BY cohort_month
)
select 
cohort_month AS current_month,
retention_1m_rate AS t_plus_1_month_retention_rate 
FROM final_table;
2025-08-19 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 30 DAY
GROUP BY usr_id, DATE(login_time))
,
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date = T1.login_date + INTERVAL 1 DAY THEN 1 ELSE 0 END) AS retained_1d,
MAX(CASE WHEN T2.login_date = T1.login_date + INTERVAL 3 DAY THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date = T1.login_date + INTERVAL 7 DAY THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date = T1.login_date + INTERVAL 14 DAY THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date IN (
T1.login_date + INTERVAL 1 DAY,
T1.login_date + INTERVAL 3 DAY,
T1.login_date + INTERVAL 7 DAY,
T1.login_date + INTERVAL 14 DAY
)
GROUP BY T1.login_date, T1.usr_id)
,
retention_summary AS (
SELECT 
first_login_date,
COUNT(usr_id) AS total_users,
SUM(retained_1d) AS retained_1d_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY first_login_date)
SELECT 
first_login_date,
CASE WHEN first_login_date + INTERVAL 1 DAY <= CURRENT_DATE
 THEN ROUND(retained_1d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_1_retention_rate,
CASE WHEN first_login_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_3_retention_rate,
CASE WHEN first_login_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_7_retention_rate,
CASE WHEN first_login_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_14_retention_rate
FROM retention_summary
WHERE first_login_date >= CURRENT_DATE - INTERVAL 30 DAY
ORDER BY first_login_date;
2025-08-19 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 120 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 1 DAY) THEN 1 ELSE 0 END) AS retained_1d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 14 DAY) THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date IN (
DATE_ADD(T1.login_date, INTERVAL 1 DAY),
DATE_ADD(T1.login_date, INTERVAL 3 DAY),
DATE_ADD(T1.login_date, INTERVAL 7 DAY),
DATE_ADD(T1.login_date, INTERVAL 14 DAY)
)
GROUP BY T1.login_date, T1.usr_id
)
SELECT 
first_login_date,
ROUND(SUM(retained_1d) * 100.0 / COUNT(usr_id), 2) AS t_plus_1_retention_rate,
ROUND(SUM(retained_3d) * 100.0 / COUNT(usr_id), 2) AS t_plus_3_retention_rate,
ROUND(SUM(retained_7d) * 100.0 / COUNT(usr_id), 2) AS t_plus_7_retention_rate,
ROUND(SUM(retained_14d) * 100.0 / COUNT(usr_id), 2) AS t_plus_14_retention_rate
FROM user_retention
WHERE first_login_date >= CURRENT_DATE - INTERVAL 30 DAY
GROUP BY first_login_date
ORDER BY first_login_date;
2025-08-19 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 90 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date IS NOT NULL 
AND T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY 
 AND T1.login_date + INTERVAL 3 DAY 
 THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date IS NOT NULL 
AND T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY 
 AND T1.login_date + INTERVAL 7 DAY 
 THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date IS NOT NULL 
AND T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY 
 AND T1.login_date + INTERVAL 14 DAY 
 THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date > T1.login_date
AND T2.login_date <= T1.login_date + INTERVAL 14 DAY
GROUP BY T1.login_date, T1.usr_id
), 
retention_summary AS (
SELECT 
first_login_date,
COUNT(usr_id) AS total_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY first_login_date
)
SELECT 
first_login_date,
CASE WHEN first_login_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_3_retention_rate,
CASE WHEN first_login_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_7_retention_rate,
CASE WHEN first_login_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_14_retention_rate
FROM retention_summary
WHERE first_login_date >= CURRENT_DATE - INTERVAL 90 DAY
ORDER BY first_login_date;
2025-08-19 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 90 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 3 DAY) AS retained_3d,
MAX(T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 7 DAY) AS retained_7d,
MAX(T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 14 DAY) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date > T1.login_date
GROUP BY T1.login_date, T1.usr_id
),
retention_summary AS (
SELECT 
first_login_date,
COUNT(usr_id) AS total_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY first_login_date
)
SELECT 
first_login_date,
CASE WHEN first_login_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_3_retention_rate,
CASE WHEN first_login_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_7_retention_rate,
CASE WHEN first_login_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_14_retention_rate
FROM retention_summary
WHERE first_login_date >= CURRENT_DATE - INTERVAL 90 DAY
ORDER BY first_login_date;
2025-08-19 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 90 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 3 DAY THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 7 DAY THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date BETWEEN T1.login_date + INTERVAL 1 DAY AND T1.login_date + INTERVAL 14 DAY THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date > T1.login_date
GROUP BY T1.login_date, T1.usr_id
),
retention_summary AS (
SELECT 
first_login_date,
COUNT(usr_id) AS total_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY first_login_date
)
SELECT 
first_login_date,
CASE WHEN first_login_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_3_retention_rate,
CASE WHEN first_login_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_7_retention_rate,
CASE WHEN first_login_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / NULLIF(total_users, 0), 2)
 ELSE NULL END AS t_plus_14_retention_rate
FROM retention_summary
WHERE first_login_date >= CURRENT_DATE - INTERVAL 90 DAY
ORDER BY first_login_date;
2025-08-19 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH daily_unique_logins AS (
    SELECT
        usr_id,
        DATE(login_time) AS login_date
    FROM
        user_login_log
    WHERE
        login_time >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
    GROUP BY
        usr_id,
        DATE(login_time)
),
retention_days AS (
    SELECT
        dul1.usr_id,
        dul1.login_date AS first_login_date,
        dul2.login_date AS next_day_login_date,
        DATEDIFF(dul2.login_date, dul1.login_date) AS days_diff
    FROM
        daily_unique_logins dul1
    LEFT JOIN
        daily_unique_logins dul2
    ON
        dul1.usr_id = dul2.usr_id AND
        dul2.login_date BETWEEN dul1.login_date + INTERVAL 1 DAY AND dul1.login_date + INTERVAL 14 DAY
)
SELECT
    first_login_date,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 3 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_3_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 7 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_7_retention_rate,
    ROUND(COUNT(DISTINCT CASE WHEN days_diff BETWEEN 1 AND 14 THEN usr_id END) * 100.0 / COUNT(DISTINCT usr_id), 2) AS t_plus_14_retention_rate
FROM
    retention_days
WHERE
    first_login_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY
    first_login_date
ORDER BY
    first_login_date;
2025-08-19 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH login_base AS (
SELECT usr_id, DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 104 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS first_login_date,
T1.usr_id,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 3 DAY)) AS retained_3d,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 7 DAY)) AS retained_7d,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 14 DAY)) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date > T1.login_date
GROUP BY T1.login_date, T1.usr_id
),
retention_summary AS (
SELECT 
first_login_date,
COUNT(usr_id) AS total_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY first_login_date
)
SELECT 
first_login_date,
CASE WHEN first_login_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t_plus_3_retention_rate,
CASE WHEN first_login_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t_plus_7_retention_rate,
CASE WHEN first_login_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t_plus_14_retention_rate
FROM retention_summary
WHERE first_login_date >= CURRENT_DATE - INTERVAL 90 DAY
ORDER BY first_login_date;
2025-08-19 抖音面试真题(3)一次性计算T+3、T+7、T+14留存率(2) 
WITH login_base AS (
SELECT usr_id, DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 104 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS cohort_date,
T1.usr_id,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 3 DAY)) AS retained_3d,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 7 DAY)) AS retained_7d,
MAX(T2.login_date BETWEEN DATE_ADD(T1.login_date, INTERVAL 1 DAY) AND DATE_ADD(T1.login_date, INTERVAL 14 DAY)) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date > T1.login_date
GROUP BY T1.login_date, T1.usr_id
),
retention_summary AS (
SELECT 
cohort_date,
COUNT(usr_id) AS total_users,
SUM(retained_3d) AS retained_3d_users,
SUM(retained_7d) AS retained_7d_users,
SUM(retained_14d) AS retained_14d_users
FROM user_retention
GROUP BY cohort_date
)
SELECT 
cohort_date,
CASE WHEN cohort_date + INTERVAL 3 DAY <= CURRENT_DATE
 THEN ROUND(retained_3d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t3_retention_rate,
CASE WHEN cohort_date + INTERVAL 7 DAY <= CURRENT_DATE
 THEN ROUND(retained_7d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t7_retention_rate,
CASE WHEN cohort_date + INTERVAL 14 DAY <= CURRENT_DATE
 THEN ROUND(retained_14d_users * 100.0 / total_users, 2)
 ELSE NULL END AS t14_retention_rate
FROM retention_summary
WHERE cohort_date >= CURRENT_DATE - INTERVAL 90 DAY
ORDER BY cohort_date;
2025-08-19 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 120 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS cohort_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 1 DAY) THEN 1 ELSE 0 END) AS retained_1d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 14 DAY) THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date IN (
DATE_ADD(T1.login_date, INTERVAL 1 DAY),
DATE_ADD(T1.login_date, INTERVAL 3 DAY),
DATE_ADD(T1.login_date, INTERVAL 7 DAY),
DATE_ADD(T1.login_date, INTERVAL 14 DAY)
)
GROUP BY T1.login_date, T1.usr_id
)
SELECT 
cohort_date,
ROUND(SUM(retained_1d) * 100.0 / COUNT(usr_id), 2) AS t1_retention,
ROUND(SUM(retained_3d) * 100.0 / COUNT(usr_id), 2) AS t3_retention,
ROUND(SUM(retained_7d) * 100.0 / COUNT(usr_id), 2) AS t7_retention,
ROUND(SUM(retained_14d) * 100.0 / COUNT(usr_id), 2) AS t14_retention
FROM user_retention
WHERE cohort_date >= CURRENT_DATE - INTERVAL 30 DAY
GROUP BY cohort_date
ORDER BY cohort_date;
2025-08-19 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE login_time >= CURRENT_DATE - INTERVAL 120 DAY
GROUP BY usr_id, DATE(login_time)
),
user_retention AS (
SELECT 
T1.login_date AS cohort_date,
T1.usr_id,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 1 DAY) THEN 1 ELSE 0 END) AS retained_1d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS retained_3d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS retained_7d,
MAX(CASE WHEN T2.login_date = DATE_ADD(T1.login_date, INTERVAL 14 DAY) THEN 1 ELSE 0 END) AS retained_14d
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id
AND T2.login_date IN (
DATE_ADD(T1.login_date, INTERVAL 1 DAY),
DATE_ADD(T1.login_date, INTERVAL 3 DAY),
DATE_ADD(T1.login_date, INTERVAL 7 DAY),
DATE_ADD(T1.login_date, INTERVAL 14 DAY)
)
GROUP BY T1.login_date, T1.usr_id
)
SELECT 
cohort_date,
COUNT(usr_id) AS total_users,
ROUND(SUM(retained_1d) * 100.0 / COUNT(usr_id), 2) AS t1_retention,
ROUND(SUM(retained_3d) * 100.0 / COUNT(usr_id), 2) AS t3_retention,
ROUND(SUM(retained_7d) * 100.0 / COUNT(usr_id), 2) AS t7_retention,
ROUND(SUM(retained_14d) * 100.0 / COUNT(usr_id), 2) AS t14_retention
FROM user_retention
WHERE cohort_date >= CURRENT_DATE - INTERVAL 30 DAY
GROUP BY cohort_date
ORDER BY cohort_date;
2025-08-17 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH login_base AS (
SELECT 
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
WHERE DATEDIFF(CURRENT_DATE, DATE(login_time)) <= 90
GROUP BY usr_id, DATE(login_time)
),
user_future_logins AS (
SELECT 
T1.usr_id,
T1.login_date,
T2.login_date AS after_date,
DATEDIFF(T2.login_date, T1.login_date) AS date_gap
FROM login_base T1
LEFT JOIN login_base T2 
ON T1.usr_id = T2.usr_id 
AND T2.login_date >= T1.login_date
),
retention_calculation AS (
SELECT 
login_date,
COUNT(DISTINCT usr_id) AS denominator,
COUNT(DISTINCT CASE 
WHEN date_gap = 1 AND login_date + INTERVAL 1 DAY <= CURRENT_DATE 
THEN usr_id END) AS numerator_1,
COUNT(DISTINCT CASE 
WHEN date_gap = 3 AND login_date + INTERVAL 3 DAY <= CURRENT_DATE 
THEN usr_id END) AS numerator_3,
COUNT(DISTINCT CASE 
WHEN date_gap = 7 AND login_date + INTERVAL 7 DAY <= CURRENT_DATE 
THEN usr_id END) AS numerator_7,
COUNT(DISTINCT CASE 
WHEN date_gap = 14 AND login_date + INTERVAL 14 DAY <= CURRENT_DATE 
THEN usr_id END) AS numerator_14
FROM user_future_logins
GROUP BY login_date
)
SELECT 
login_date AS first_login_date,
ROUND(COALESCE(numerator_1 * 100.0 / NULLIF(denominator, 0), 0), 2) AS t_plus_1_retention_rate,
ROUND(COALESCE(numerator_3 * 100.0 / NULLIF(denominator, 0), 0), 2) AS t_plus_3_retention_rate,
ROUND(COALESCE(numerator_7 * 100.0 / NULLIF(denominator, 0), 0), 2) AS t_plus_7_retention_rate,
ROUND(COALESCE(numerator_14 * 100.0 / NULLIF(denominator, 0), 0), 2) AS t_plus_14_retention_rate
FROM retention_calculation
WHERE login_date >= CURRENT_DATE - 30;
2025-08-17 抖音面试真题(2)一次性计算T+1、T+3、T+7、T+14留存率 
WITH 
90_criteria_list AS (
select usr_id,
DATE(login_time) AS login_date
from user_login_log
where datediff(current_date, date(login_time)) <= 90 ORDER BY login_date
),
after_days AS (
SELECT * FROM (
select T1.*,
T2.login_date AS after_date
from 90_criteria_list AS T1
LEFT JOIN 90_criteria_list AS T2
ON T1.usr_id = T2.usr_id
) AS TEM
WHERE login_date <= after_date
),
full_gaps AS (
select login_date, usr_id, after_date,
DATEDIFF(after_date, login_date) AS date_gap
from after_days
),
preparation AS (
select login_date,
COUNT(distinct usr_id) AS denominator,
COUNT(DISTINCT case when date_gap =1 thenusr_id else NULL END ) AS numerator_1,
COUNT(DISTINCT case when date_gap =3 thenusr_id else NULL END ) AS numerator_3,
COUNT(DISTINCT case when date_gap =7 thenusr_id else NULL END ) AS numerator_7,
COUNT(DISTINCT case when date_gap =14 thenusr_id else NULL END ) AS numerator_14
from full_gaps
GROUP BY login_date
)
select 
login_date AS first_login_date, 
numerator_1 / denominator AS t_plus_1_retention_rate,
numerator_3 / denominator AS t_plus_3_retention_rate,
numerator_7 / denominator AS t_plus_7_retention_rate,
numerator_14 / denominator AS t_plus_14_retention_rate
from preparation;
2025-07-28 5月3日的所有打车记录 
select * 
from didi_order_rcd 
where DATE(call_time) = '2021-05-03'
AND DATE(cancel_time) <> '1970-01-01'
order by call_time ASC;
2025-07-28 5月3日的所有打车记录 
select * 
from didi_order_rcd 
where DATE(call_time) = '2021-05-03'
AND cancel_time is not null;
2025-07-28 抖音面试真题(1)T+1日留存率 
WITH daily_flow AS (
SELECTDISTINCT usr_id,
DATE(login_time) as login_date
FROM user_login_log
WHERE DATEDIFF(CURRENT_DATE, DATE(login_time)) <= 30
),
daily_vs_tomorrow AS (
SELECT 
T_now.usr_id, 
T_now.login_date as now_date, 
T_plus_1day.login_date as now_plus_1_date 
FROM 
daily_flow as T_now 
LEFT JOIN 
daily_flow as T_plus_1day 
ON 
T_now.usr_id = T_plus_1day.usr_id 
AND T_now.login_date + INTERVAL 1 DAY = T_plus_1day.login_date
)
SELECT 
	now_date AS first_login_date,
CONCAT(ROUND(AVG(CASE WHEN now_plus_1_date IS NOT NULL THEN 1.0 ELSE 0.0 END) *100, 2), '%') AS T_plus_1day_retention_rate
FROM daily_vs_tomorrow
GROUP BY now_date
order by now_date ASC;
2025-07-28 抖音面试真题(1)T+1日留存率 
WITH daily_flow AS (
SELECTDISTINCT usr_id,
DATE(login_time) as login_date
FROM user_login_log
WHERE DATEDIFF(CURRENT_DATE, DATE(login_time)) <= 30
),
daily_vs_tomorrow AS (
SELECT 
T_now.usr_id, 
T_now.login_date as now_date, 
T_plus_1day.login_date as now_plus_1_date 
FROM 
daily_flow as T_now 
LEFT JOIN 
daily_flow as T_plus_1day 
ON 
T_now.usr_id = T_plus_1day.usr_id 
AND T_now.login_date + INTERVAL 1 DAY = T_plus_1day.login_date
)
SELECT 
	now_date AS first_login_date,
CONCAT(ROUND(AVG(now_plus_1_date is not null) *100, 2), '%') AS T_plus_1day_retention_rate
FROM daily_vs_tomorrow
GROUP BY now_date
order by now_date ASC;
2025-07-28 抖音面试真题(1)T+1日留存率 
WITH daily_flow AS (
SELECT usr_id,
DATE(login_time) as login_date
FROM user_login_log
WHERE DATEDIFF(CURRENT_DATE, DATE(login_time)) <= 30
),
daily_vs_tomorrow AS (
SELECT 
T_now.usr_id, 
T_now.login_date as now_date, 
T_plus_1day.login_date as now_plus_1_date 
FROM 
daily_flow as T_now 
LEFT JOIN 
daily_flow as T_plus_1day 
ON 
T_now.usr_id = T_plus_1day.usr_id 
AND T_now.login_date + INTERVAL 1 DAY = T_plus_1day.login_date
)
SELECT 
	now_date AS first_login_date,
CONCAT(ROUND(AVG(now_plus_1_date is not null) *100, 2), '%') AS T_plus_1day_retention_rate
FROM daily_vs_tomorrow
GROUP BY now_date
order by now_date ASC;