72 lines
3.0 KiB
SQL
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;
|