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

111 lines
4.5 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- L1+L2用户(821人)上周学习情况仅学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 AS (
SELECT o.account_id, o.goods_id
FROM bi_vala_order o
JOIN paying_active pa ON o.account_id = pa.account_id
WHERE o.order_status IN (3, 4) AND o.pay_success_date IS NOT NULL
),
l1l2_accounts AS (
SELECT account_id
FROM user_goods
GROUP BY account_id
HAVING bool_or(goods_id = 61) OR (bool_or(goods_id IN (57, 60, 63)) AND bool_or(goods_id IN (31, 32, 33, 54)))
),
l1l2_chars AS (
SELECT c.id AS user_id, c.account_id
FROM bi_vala_app_character c
JOIN l1l2_accounts a ON c.account_id = a.account_id
),
last_week_chapters AS (
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_0 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_1 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_2 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_3 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_4 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_5 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_6 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
UNION ALL
SELECT p.user_id, p.chapter_id
FROM bi_user_chapter_play_record_7 p
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
),
chapter_with_level AS (
SELECT DISTINCT c.account_id, bl.course_level
FROM last_week_chapters lw
JOIN l1l2_chars c ON lw.user_id = c.user_id
JOIN bi_level_unit_lesson bl ON lw.chapter_id = bl.id
WHERE bl.course_level IN ('L1', 'L2')
),
user_level_study AS (
SELECT
account_id,
bool_or(course_level = 'L1') AS studied_l1,
bool_or(course_level = 'L2') AS studied_l2
FROM chapter_with_level
GROUP BY account_id
)
SELECT
CASE
WHEN studied_l1 AND studied_l2 THEN 'L1和L2都学了'
WHEN studied_l1 THEN '仅学了L1'
WHEN studied_l2 THEN '仅学了L2'
END AS study_type,
COUNT(*) AS user_count
FROM user_level_study
GROUP BY 1
ORDER BY 1;