added second part of pet project 'effective courses'
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
CREATE MATERIALIZED VIEW course_summary AS
|
||||
|
||||
--кол-во уникальных пользователей в рамках одного курса (ready)
|
||||
WITH unique_users AS (
|
||||
SELECT
|
||||
pe.course_id,
|
||||
COUNT(*) AS unique_users
|
||||
FROM pet_enrollments pe
|
||||
GROUP BY pe.course_id
|
||||
ORDER BY pe.course_id
|
||||
),
|
||||
|
||||
--общее кол-во уроков
|
||||
lesson_count AS (
|
||||
SELECT
|
||||
pl.course_id,
|
||||
COUNT(*) AS lesson_count
|
||||
FROM pet_lessons pl
|
||||
GROUP BY pl.course_id
|
||||
ORDER BY pl.course_id
|
||||
|
||||
),
|
||||
|
||||
--суммарное число просмотров уроков по курсу
|
||||
total_views AS (
|
||||
SELECT
|
||||
pc.id,
|
||||
COUNT(*) AS total_views
|
||||
FROM pet_courses pc
|
||||
JOIN pet_lessons pl ON pc.id = pl.course_id
|
||||
JOIN pet_lesson_views plv ON pl.id = plv.lesson_id
|
||||
GROUP BY pc.id
|
||||
ORDER BY pc.id
|
||||
|
||||
),
|
||||
|
||||
--дата и время первого просмотра любого урока курса
|
||||
first_viewed_at AS (
|
||||
SELECT
|
||||
pc.id,
|
||||
FIRST_VALUE(plv.viewed_at) OVER (
|
||||
PARTITION BY pc.id
|
||||
ORDER BY plv.viewed_at
|
||||
) AS first_viewed_at
|
||||
FROM pet_courses pc
|
||||
JOIN pet_lessons pl ON pc.id = pl.course_id
|
||||
JOIN pet_lesson_views plv ON pl.id = plv.lesson_id
|
||||
),
|
||||
|
||||
--дата и время последнего просмотра любого урока курса
|
||||
last_viewed_at AS (
|
||||
SELECT
|
||||
pc.id,
|
||||
LAST_VALUE(plv.viewed_at) OVER (
|
||||
PARTITION BY pc.id
|
||||
ORDER BY plv.viewed_at
|
||||
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
|
||||
) AS last_viewed_at
|
||||
FROM pet_courses pc
|
||||
JOIN pet_lessons pl ON pc.id = pl.course_id
|
||||
JOIN pet_lesson_views plv ON pl.id = plv.lesson_id
|
||||
)
|
||||
|
||||
SELECT
|
||||
pc.id AS course_id,
|
||||
pc.title AS course_title,
|
||||
uu.unique_users,
|
||||
lc.lesson_count,
|
||||
tv.total_views,
|
||||
ROUND(tv.total_views * 1.0 / uu.unique_users, 2) AS avg_views_per_user,
|
||||
first_viewed_at,
|
||||
last_viewed_at
|
||||
|
||||
FROM pet_courses pc
|
||||
LEFT JOIN unique_users uu ON pc.id = uu.course_id
|
||||
LEFT JOIN lesson_count lc ON lc.course_id = pc.id
|
||||
LEFT JOIN total_views tv ON tv.id = pc.id
|
||||
LEFT JOIN first_viewed_at fva ON fva.id = pc.id
|
||||
LEFT JOIN last_viewed_at lva ON lva.id = pc.id
|
||||
|
||||
GROUP BY pc.id, uu.unique_users, lc.lesson_count, tv.total_views, first_viewed_at, last_viewed_at
|
||||
ORDER BY course_id
|
||||
|
||||
Reference in New Issue
Block a user