fix pet-project

This commit is contained in:
dmezentsev
2026-06-08 09:47:15 +03:00
parent 1af6c81db1
commit 4e91bb783e
4 changed files with 12 additions and 11 deletions
@@ -25,7 +25,7 @@ CREATE TABLE dmezentsev.lessons (
title VARCHAR(200) NOT NULL,
duration_min SMALLINT,
FOREIGN KEY (course_id) REFERENCES courses(id)
FOREIGN KEY (course_id) REFERENCES dmezentsev.courses(id)
);
CREATE TABLE dmezentsev.enrollments (
@@ -34,8 +34,8 @@ CREATE TABLE dmezentsev.enrollments (
course_id BIGINT NOT NULL,
enrolled_at DATE,
FOREIGN KEY (user_id) REFERENCES users_(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
FOREIGN KEY (user_id) REFERENCES dmezentsev.users_(id),
FOREIGN KEY (course_id) REFERENCES dmezentsev.courses(id)
);
CREATE TABLE dmezentsev.lesson_views (
@@ -44,8 +44,8 @@ CREATE TABLE dmezentsev.lesson_views (
lesson_id BIGINT NOT NULL,
viewed_at TIMESTAMPTZ,
FOREIGN KEY (user_id) REFERENCES users_(id),
FOREIGN KEY (lesson_id) REFERENCES lessons(id)
FOREIGN KEY (user_id) REFERENCES dmezentsev.users_(id),
FOREIGN KEY (lesson_id) REFERENCES dmezentsev.lessons(id)
);
INSERT INTO dmezentsev.users_ (id, name, age, email, registration_date) VALUES
@@ -38,8 +38,8 @@ SELECT
COALESCE(uv.viewed_lessons_count, 0) AS viewed_lessons_count,
uv.last_view,
uv.first_view,
ROUND(uv.viewed_lessons_count::numeric / al.possible_lessons * 100, 2) AS engagement_rate
FROM users_ u
ROUND(uv.viewed_lessons_count::numeric / NULLIF(al.possible_lessons, 0) * 100, 2) AS engagement_rate
FROM dmezentsev.users_ u
JOIN user_enroll ue ON ue.user_id = u.id
JOIN all_lessons al ON al.user_id = u.id
LEFT JOIN user_views uv ON uv.user_id = u.id
@@ -1,5 +1,5 @@
DROP MATERIALIZED VIEW IF EXISTS user_cohort_analysis;
CREATE MATERIALIZED VIEW user_cohort_analysis AS
DROP MATERIALIZED VIEW IF EXISTS dmezentsev.user_cohort_analysis;
CREATE MATERIALIZED VIEW dmezentsev.user_cohort_analysis AS
WITH users_in_cohort AS (
-- Кол-во зарегистрированных пользователей по когортам
SELECT
+3 -2
View File
@@ -21,11 +21,12 @@ SELECT
popularity_rank
FROM dmezentsev.lesson_popularity_ranking
WHERE avg_views_per_viewer > 1
ORDER BY avg_views_per_viewer DESC, total_views DESC;
ORDER BY avg_views_per_viewer DESC, total_views DESC
LIMIT 3;
-- Задание 3: Лучшая когорта по retention
SELECT cohort_month, retention_rate
FROM user_cohort_analysis
FROM dmezentsev.user_cohort_analysis
ORDER BY retention_rate DESC
LIMIT 3;