ai_member_xiaoxi/scripts/l2_pass_time.sql
2026-05-07 08:00:01 +08:00

90 lines
4.1 KiB
SQL

-- L2 每个课时首次通关耗时统计
-- 遍历 8 张 user_chapter_play_record 分表
WITH l2_chapters AS (
SELECT id AS chapter_id, course_season, course_unit, course_lesson
FROM bi_level_unit_lesson
WHERE course_level = 'L2'
),
all_first_done AS (
SELECT chapter_id, user_id, chapter_unique_id, first_done_time
FROM (
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_0
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_1
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_2
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_3
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_4
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_5
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_6
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
UNION ALL
SELECT chapter_id, user_id, chapter_unique_id, MIN(created_at) AS first_done_time
FROM bi_user_chapter_play_record_7
WHERE play_status = 1 AND chapter_id IN (SELECT chapter_id FROM l2_chapters)
GROUP BY chapter_id, user_id, chapter_unique_id
) t
),
chapter_time AS (
SELECT
fd.chapter_id,
fd.chapter_unique_id,
SUM(comp.interval_time) AS total_ms
FROM all_first_done fd
JOIN LATERAL (
SELECT SUM(c.interval_time) AS interval_time
FROM bi_user_component_play_record_0 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_1 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_2 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_3 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_4 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_5 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_6 c WHERE c.chapter_unique_id = fd.chapter_unique_id
UNION ALL
SELECT SUM(c.interval_time) FROM bi_user_component_play_record_7 c WHERE c.chapter_unique_id = fd.chapter_unique_id
) comp ON true
GROUP BY fd.chapter_id, fd.chapter_unique_id
)
SELECT
lc.course_season,
lc.course_unit,
lc.course_lesson,
lc.chapter_id,
COUNT(*) AS ,
ROUND(AVG(ct.total_ms) / 60000.0, 1) AS _分钟
FROM l2_chapters lc
LEFT JOIN chapter_time ct ON lc.chapter_id = ct.chapter_id
GROUP BY lc.course_season, lc.course_unit, lc.course_lesson, lc.chapter_id
ORDER BY lc.course_season, lc.course_unit, lc.course_lesson;