90 lines
4.1 KiB
SQL
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;
|