用户等级定义:
假设今天是数据中所有日期的最大值,从用户登录明细表中的用户登录时间给各用户分级,求出各等级用户的人数。
Level(用户等级) | Cn(用户数量) |
---|---|
忠实用户 | 6 |
新增用户 | 3 |
沉睡用户 | 1 |
SELECT
t2.level,
COUNT(*)
FROM
(
SELECT
uld.user_id,
CASE
WHEN (DATE_FORMAT(MAX(uld.login_ts), 'yyyy-MM-dd') <= DATE_SUB(TODAY(), 30)) THEN '流失用户'
WHEN (DATE_FORMAT(MIN(uld.login_ts), 'yyyy-MM-dd') <= DATE_SUB(TODAY(), 7) AND DATE_FORMAT(MAX(uld.login_ts), 'yyyy-MM-dd') >= DATE_SUB(TODAY(), 7)) THEN '忠实用户'
WHEN (DATE_FORMAT(MIN(uld.login_ts), 'yyyy-MM-dd') >= DATE_SUB(TODAY(), 7)) THEN '新增用户'
WHEN (DATE_FORMAT(MIN(uld.login_ts), 'yyyy-MM-dd') <= DATE_SUB(TODAY(), 7) AND DATE_FORMAT(MAX(uld.login_ts), 'yyyy-MM-dd') <= DATE_SUB(TODAY(), 7)) THEN '沉睡用户'
END AS level
FROM
user_login_detail uld
JOIN
(
SELECT
DATE_FORMAT(MAX(login_ts), 'yyyy-MM-dd') AS today
FROM
user_login_detail
) t1
ON
1 = 1
GROUP BY
uld.user_id, t1.today
) t2
GROUP BY
t2.level;
用户每天签到可以领1金币,并可以累计签到天数,连续签到的第3、7天分别可以额外领2和6金币。每连续签到7天重新累积签到天数。从用户登录明细表中求出每个用户金币总数,并按照金币总数倒序排序。
User_id(用户id) | Sum_coin_cn(金币总数) |
---|---|
101 | 7 |
109 | 3 |
107 | 3 |
102 | 3 |
106 | 2 |