diff --git a/dmezentsev/postgresql/pet_project/DDL_DML.sql b/dmezentsev/postgresql/pet_project/DDL_DML.sql index 00b36ad..498ef54 100644 --- a/dmezentsev/postgresql/pet_project/DDL_DML.sql +++ b/dmezentsev/postgresql/pet_project/DDL_DML.sql @@ -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 diff --git a/dmezentsev/postgresql/pet_project/dm_user_activity_summary.sql b/dmezentsev/postgresql/pet_project/dm_user_activity_summary.sql index 699f678..af4bd02 100644 --- a/dmezentsev/postgresql/pet_project/dm_user_activity_summary.sql +++ b/dmezentsev/postgresql/pet_project/dm_user_activity_summary.sql @@ -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 diff --git a/dmezentsev/postgresql/pet_project/dm_user_cohort_analysis.sql b/dmezentsev/postgresql/pet_project/dm_user_cohort_analysis.sql index f7d8008..27616d7 100644 --- a/dmezentsev/postgresql/pet_project/dm_user_cohort_analysis.sql +++ b/dmezentsev/postgresql/pet_project/dm_user_cohort_analysis.sql @@ -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 diff --git a/dmezentsev/postgresql/pet_project/extra.sql b/dmezentsev/postgresql/pet_project/extra.sql index d6f2fb5..aeeb803 100644 --- a/dmezentsev/postgresql/pet_project/extra.sql +++ b/dmezentsev/postgresql/pet_project/extra.sql @@ -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;