fix pet-project
This commit is contained in:
@@ -25,7 +25,7 @@ CREATE TABLE dmezentsev.lessons (
|
|||||||
title VARCHAR(200) NOT NULL,
|
title VARCHAR(200) NOT NULL,
|
||||||
duration_min SMALLINT,
|
duration_min SMALLINT,
|
||||||
|
|
||||||
FOREIGN KEY (course_id) REFERENCES courses(id)
|
FOREIGN KEY (course_id) REFERENCES dmezentsev.courses(id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE dmezentsev.enrollments (
|
CREATE TABLE dmezentsev.enrollments (
|
||||||
@@ -34,8 +34,8 @@ CREATE TABLE dmezentsev.enrollments (
|
|||||||
course_id BIGINT NOT NULL,
|
course_id BIGINT NOT NULL,
|
||||||
enrolled_at DATE,
|
enrolled_at DATE,
|
||||||
|
|
||||||
FOREIGN KEY (user_id) REFERENCES users_(id),
|
FOREIGN KEY (user_id) REFERENCES dmezentsev.users_(id),
|
||||||
FOREIGN KEY (course_id) REFERENCES courses(id)
|
FOREIGN KEY (course_id) REFERENCES dmezentsev.courses(id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE dmezentsev.lesson_views (
|
CREATE TABLE dmezentsev.lesson_views (
|
||||||
@@ -44,8 +44,8 @@ CREATE TABLE dmezentsev.lesson_views (
|
|||||||
lesson_id BIGINT NOT NULL,
|
lesson_id BIGINT NOT NULL,
|
||||||
viewed_at TIMESTAMPTZ,
|
viewed_at TIMESTAMPTZ,
|
||||||
|
|
||||||
FOREIGN KEY (user_id) REFERENCES users_(id),
|
FOREIGN KEY (user_id) REFERENCES dmezentsev.users_(id),
|
||||||
FOREIGN KEY (lesson_id) REFERENCES lessons(id)
|
FOREIGN KEY (lesson_id) REFERENCES dmezentsev.lessons(id)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO dmezentsev.users_ (id, name, age, email, registration_date) VALUES
|
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,
|
COALESCE(uv.viewed_lessons_count, 0) AS viewed_lessons_count,
|
||||||
uv.last_view,
|
uv.last_view,
|
||||||
uv.first_view,
|
uv.first_view,
|
||||||
ROUND(uv.viewed_lessons_count::numeric / al.possible_lessons * 100, 2) AS engagement_rate
|
ROUND(uv.viewed_lessons_count::numeric / NULLIF(al.possible_lessons, 0) * 100, 2) AS engagement_rate
|
||||||
FROM users_ u
|
FROM dmezentsev.users_ u
|
||||||
JOIN user_enroll ue ON ue.user_id = u.id
|
JOIN user_enroll ue ON ue.user_id = u.id
|
||||||
JOIN all_lessons al ON al.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
|
LEFT JOIN user_views uv ON uv.user_id = u.id
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
DROP MATERIALIZED VIEW IF EXISTS user_cohort_analysis;
|
DROP MATERIALIZED VIEW IF EXISTS dmezentsev.user_cohort_analysis;
|
||||||
CREATE MATERIALIZED VIEW user_cohort_analysis AS
|
CREATE MATERIALIZED VIEW dmezentsev.user_cohort_analysis AS
|
||||||
WITH users_in_cohort AS (
|
WITH users_in_cohort AS (
|
||||||
-- Кол-во зарегистрированных пользователей по когортам
|
-- Кол-во зарегистрированных пользователей по когортам
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -21,11 +21,12 @@ SELECT
|
|||||||
popularity_rank
|
popularity_rank
|
||||||
FROM dmezentsev.lesson_popularity_ranking
|
FROM dmezentsev.lesson_popularity_ranking
|
||||||
WHERE avg_views_per_viewer > 1
|
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
|
-- Задание 3: Лучшая когорта по retention
|
||||||
SELECT cohort_month, retention_rate
|
SELECT cohort_month, retention_rate
|
||||||
FROM user_cohort_analysis
|
FROM dmezentsev.user_cohort_analysis
|
||||||
ORDER BY retention_rate DESC
|
ORDER BY retention_rate DESC
|
||||||
LIMIT 3;
|
LIMIT 3;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user