ai_member_xiaoxi/scripts/weekly_active_paying_users.sql
2026-05-18 08:00:01 +08:00

72 lines
3.0 KiB
SQL

-- 上周(2026-05-11~2026-05-17)有课消的付费用户,按 L1/L2 分类
WITH last_week_active_chars AS (
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_0 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_1 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_2 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_3 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_4 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_5 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_6 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
UNION
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_7 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
),
last_week_active_accounts AS (
SELECT DISTINCT c.account_id
FROM last_week_active_chars lw
JOIN bi_vala_app_character c ON lw.user_id = c.id
),
paying_active AS (
SELECT DISTINCT lw.account_id
FROM last_week_active_accounts lw
WHERE EXISTS (
SELECT 1 FROM bi_vala_order o
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
WHERE o.account_id = lw.account_id
AND o.order_status IN (3, 4)
AND o.pay_success_date IS NOT NULL
)
),
user_goods_agg AS (
SELECT
pa.account_id,
array_agg(DISTINCT o.goods_id) AS goods_ids
FROM paying_active pa
JOIN bi_vala_order o ON pa.account_id = o.account_id
WHERE o.order_status IN (3, 4)
AND o.pay_success_date IS NOT NULL
GROUP BY pa.account_id
),
classified AS (
SELECT
account_id,
CASE
WHEN 61 = ANY(goods_ids) THEN 'L1+L2'
WHEN (57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids))
AND (31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids))
THEN 'L1+L2'
WHEN 57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids) THEN '仅L1'
WHEN 31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids) THEN '仅L2'
ELSE '其他'
END AS level_type
FROM user_goods_agg
)
SELECT
level_type,
COUNT(*) AS user_count
FROM classified
GROUP BY level_type
ORDER BY
CASE level_type
WHEN '仅L1' THEN 1
WHEN '仅L2' THEN 2
WHEN 'L1+L2' THEN 3
WHEN '其他' THEN 4
END;