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