убрал : из папок
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
--DROP TABLE IF EXISTS users;
|
||||
CREATE TABLE users (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
name varchar(100) NOT NULL,
|
||||
age SMALLINT,
|
||||
email varchar(100),
|
||||
registration_date timestamptz NOT NULL
|
||||
);
|
||||
|
||||
--DROP TABLE IF EXISTS courses;
|
||||
CREATE TABLE courses (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
title varchar(150) NOT NULL,
|
||||
category varchar(50),
|
||||
created_at timestamptz NOT NULL
|
||||
);
|
||||
|
||||
--DROP TABLE IF EXISTS lessons;
|
||||
CREATE TABLE lessons (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
course_id bigint NOT NULL,
|
||||
title varchar(150) NOT NULL,
|
||||
duration_min SMALLINT NOT NULL,
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id)
|
||||
);
|
||||
|
||||
--DROP TABLE IF EXISTS enrollments;
|
||||
CREATE TABLE enrollments (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
user_id bigint NOT NULL,
|
||||
course_id bigint NOT NULL,
|
||||
enrolled_at timestamptz NOT NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id)
|
||||
);
|
||||
|
||||
--DROP TABLE IF EXISTS lesson_views;
|
||||
CREATE TABLE lesson_views (
|
||||
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
user_id bigint NOT NULL,
|
||||
lesson_id bigint NOT NULL,
|
||||
viewed_at timestamptz NOT NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
FOREIGN KEY (lesson_id) REFERENCES lessons(id)
|
||||
);
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
INSERT INTO users (name, age, email, registration_date) VALUES
|
||||
('Alice',25,'alice@mail.com','2023-01-10'),
|
||||
('Bob',30,'bob@gmail.com','2023-02-05'),
|
||||
('Charlie',22,'charlie@mail.com','2023-02-20'),
|
||||
('Diana',28,'diana@mail.com','2023-03-01'),
|
||||
('Ethan',35,'ethan@gmail.com','2023-03-10'),
|
||||
('Frank',29,'frank@mail.com','2023-01-05'),
|
||||
('Grace',26,'grace@gmail.com','2023-01-12'),
|
||||
('Henry',32,'henry@mail.com','2023-01-20'),
|
||||
('Iris',24,'iris@gmail.com','2023-02-10'),
|
||||
('Jack',27,'jack@mail.com','2023-04-15'),
|
||||
('Kelly',23,'kelly@gmail.com','2023-04-20'),
|
||||
('Leo',31,'leo@mail.com','2023-01-15'),
|
||||
('Mia',26,'mia@gmail.com','2023-01-18'),
|
||||
('Nina',28,'nina@mail.com','2023-01-08'),
|
||||
('Oscar',33,'oscar@gmail.com','2023-01-10'),
|
||||
('Paul',29,'paul@mail.com','2023-02-15'),
|
||||
('Quinn',24,'quinn@gmail.com','2023-03-20'),
|
||||
('Rita',27,'rita@mail.com','2023-04-01'),
|
||||
('Sam',30,'sam@gmail.com','2023-04-10'),
|
||||
('Tina',25,'tina@mail.com','2023-04-18');
|
||||
|
||||
INSERT INTO courses (title, category, created_at) VALUES
|
||||
('SQL для начинающих','data','2023-01-01'),
|
||||
('Python для анализа данных','programming','2023-01-15'),
|
||||
('BI с нуля','business','2023-03-01'),
|
||||
('Excel для аналитиков','business','2023-02-01'),
|
||||
('Основы машинного обучения','data','2023-03-15');
|
||||
|
||||
INSERT INTO lessons (course_id, title, duration_min) VALUES
|
||||
(1,'SELECT и FROM',10),
|
||||
(1,'JOIN',15),
|
||||
(1,'WHERE и фильтрация',12),
|
||||
(1,'Агрегации и GROUP BY',18),
|
||||
(1,'Подзапросы',25),
|
||||
(2,'Pandas основы',20),
|
||||
(2,'NumPy',15),
|
||||
(2,'Визуализация данных',22),
|
||||
(3,'Основы BI',12),
|
||||
(3,'Метрики и дашборды',18),
|
||||
(3,'Power BI введение',20),
|
||||
(4,'Формулы в Excel',15),
|
||||
(4,'Сводные таблицы',18),
|
||||
(4,'Графики и диаграммы',14),
|
||||
(5,'Введение в ML',20),
|
||||
(5,'Линейная регрессия',30),
|
||||
(5,'Классификация',28),
|
||||
(5,'Кластеризация',25);
|
||||
|
||||
INSERT INTO enrollments (user_id, course_id, enrolled_at) VALUES
|
||||
(1,1,'2023-01-15'),
|
||||
(1,2,'2023-02-01'),
|
||||
(2,1,'2023-01-20'),
|
||||
(3,2,'2023-03-05'),
|
||||
(4,3,'2023-04-01'),
|
||||
(6,1,'2023-01-06'),
|
||||
(6,2,'2023-01-10'),
|
||||
(6,4,'2023-02-05'),
|
||||
(7,1,'2023-01-13'),
|
||||
(7,3,'2023-03-10'),
|
||||
(8,1,'2023-01-22'),
|
||||
(8,2,'2023-01-22'),
|
||||
(8,3,'2023-01-22'),
|
||||
(9,4,'2023-02-12'),
|
||||
(10,1,'2023-04-16'),
|
||||
(11,2,'2023-04-21'),
|
||||
(12,1,'2023-01-16'),
|
||||
(13,2,'2023-01-19'),
|
||||
(13,4,'2023-02-20'),
|
||||
(14,1,'2023-01-09'),
|
||||
(14,2,'2023-01-09'),
|
||||
(14,3,'2023-01-09'),
|
||||
(14,4,'2023-02-01'),
|
||||
(14,5,'2023-03-20'),
|
||||
(15,1,'2023-01-11'),
|
||||
(15,3,'2023-03-05'),
|
||||
(16,2,'2023-02-16'),
|
||||
(16,4,'2023-02-16'),
|
||||
(17,3,'2023-03-22'),
|
||||
(17,5,'2023-03-25'),
|
||||
(18,1,'2023-04-02'),
|
||||
(19,1,'2023-04-11'),
|
||||
(19,2,'2023-04-11'),
|
||||
(20,2,'2023-04-19'),
|
||||
(5,5,'2023-03-20'),
|
||||
(1,4,'2023-02-10'),
|
||||
(2,3,'2023-03-15'),
|
||||
(3,1,'2023-02-25'),
|
||||
(4,2,'2023-03-10'),
|
||||
(6,3,'2023-03-08'),
|
||||
(7,2,'2023-02-01'),
|
||||
(9,1,'2023-02-15'),
|
||||
(12,3,'2023-03-10'),
|
||||
(15,2,'2023-02-01'),
|
||||
(18,4,'2023-04-05');
|
||||
|
||||
INSERT INTO lesson_views (user_id, lesson_id, viewed_at) VALUES
|
||||
(1,1,'2023-01-16 10:00:00'),
|
||||
(1,2,'2023-01-16 10:15:00'),
|
||||
(1,3,'2023-01-17 09:00:00'),
|
||||
(1,4,'2023-01-17 09:30:00'),
|
||||
(1,4,'2023-01-17 11:00:00'),
|
||||
(1,4,'2023-01-18 10:00:00'),
|
||||
(1,6,'2023-02-02 14:00:00'),
|
||||
(1,12,'2023-02-15 10:00:00'),
|
||||
(1,13,'2023-02-15 10:30:00'),
|
||||
(2,1,'2023-01-21 09:00:00'),
|
||||
(2,9,'2023-03-16 10:00:00'),
|
||||
(2,10,'2023-03-16 10:30:00'),
|
||||
(3,6,'2023-03-06 12:00:00'),
|
||||
(3,1,'2023-02-26 11:00:00'),
|
||||
(3,2,'2023-02-26 11:20:00'),
|
||||
(4,9,'2023-04-02 10:00:00'),
|
||||
(4,10,'2023-04-03 10:00:00'),
|
||||
(4,6,'2023-03-12 14:00:00'),
|
||||
(4,7,'2023-03-13 09:00:00'),
|
||||
(5,15,'2023-03-21 10:00:00'),
|
||||
(5,16,'2023-03-22 11:00:00'),
|
||||
(6,1,'2023-01-07 10:00:00'),
|
||||
(6,2,'2023-01-07 10:15:00'),
|
||||
(6,3,'2023-01-08 09:00:00'),
|
||||
(6,4,'2023-01-08 09:30:00'),
|
||||
(6,5,'2023-01-09 10:00:00'),
|
||||
(6,6,'2023-01-11 14:00:00'),
|
||||
(6,7,'2023-01-12 10:00:00'),
|
||||
(6,8,'2023-01-13 11:00:00'),
|
||||
(6,12,'2023-02-06 09:00:00'),
|
||||
(6,13,'2023-02-06 09:30:00'),
|
||||
(6,14,'2023-02-07 10:00:00'),
|
||||
(6,9,'2023-03-09 11:00:00'),
|
||||
(7,1,'2023-01-14 10:00:00'),
|
||||
(7,2,'2023-01-14 10:20:00'),
|
||||
(7,3,'2023-01-15 09:00:00'),
|
||||
(7,9,'2023-03-11 14:00:00'),
|
||||
(7,10,'2023-03-11 14:30:00'),
|
||||
(9,12,'2023-02-13 10:00:00'),
|
||||
(9,13,'2023-02-13 10:30:00'),
|
||||
(9,1,'2023-02-16 11:00:00'),
|
||||
(12,1,'2023-01-17 10:00:00'),
|
||||
(12,2,'2023-01-17 10:20:00'),
|
||||
(12,1,'2023-04-10 11:00:00'),
|
||||
(12,3,'2023-04-10 11:30:00'),
|
||||
(12,9,'2023-03-12 10:00:00'),
|
||||
(13,6,'2023-01-20 14:00:00'),
|
||||
(13,7,'2023-01-21 10:00:00'),
|
||||
(13,12,'2023-02-21 09:00:00'),
|
||||
(14,1,'2023-01-09 08:00:00'),
|
||||
(14,2,'2023-01-09 08:15:00'),
|
||||
(14,3,'2023-01-10 10:00:00'),
|
||||
(14,4,'2023-01-10 10:30:00'),
|
||||
(14,5,'2023-01-11 09:00:00'),
|
||||
(14,6,'2023-01-10 14:00:00'),
|
||||
(14,7,'2023-01-11 10:00:00'),
|
||||
(14,8,'2023-01-12 11:00:00'),
|
||||
(14,9,'2023-01-10 08:00:00');
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
CREATE MATERIALIZED VIEW user_cohort_analysis AS
|
||||
WITH users_and_enrollments_results AS (
|
||||
SELECT
|
||||
date_trunc('month', u.registration_date)::date AS cohort_month,
|
||||
count(DISTINCT u.id) AS users_in_cohort,
|
||||
count(DISTINCT e.user_id) AS enrolled_users,
|
||||
count(DISTINCT e.course_id) courses_in_cohort
|
||||
FROM
|
||||
users u
|
||||
JOIN
|
||||
enrollments e ON u.id = e.user_id
|
||||
GROUP BY
|
||||
cohort_month
|
||||
),
|
||||
lesson_views_results AS (
|
||||
SELECT
|
||||
date_trunc('month', u.registration_date)::date AS cohort_month,
|
||||
count(DISTINCT lv.user_id) AS active_users,
|
||||
round(avg(lv.viewed_at::date - u.registration_date::date), 0) AS avg_time_to_first_view
|
||||
FROM
|
||||
users u
|
||||
LEFT JOIN
|
||||
lesson_views lv ON u.id = lv.user_id
|
||||
GROUP BY
|
||||
cohort_month
|
||||
)
|
||||
SELECT
|
||||
uer.cohort_month,
|
||||
uer.users_in_cohort,
|
||||
uer.enrolled_users,
|
||||
lvr.active_users,
|
||||
round((lvr.active_users / uer.users_in_cohort::numeric) * 100, 2) || '%' AS retention_rate,
|
||||
round(uer.courses_in_cohort / uer.users_in_cohort::numeric, 2) AS avg_courses_per_user,
|
||||
lvr.avg_time_to_first_view
|
||||
FROM
|
||||
users_and_enrollments_results uer
|
||||
JOIN
|
||||
lesson_views_results lvr ON uer.cohort_month = lvr.cohort_month
|
||||
ORDER BY
|
||||
uer.cohort_month;
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
CREATE MATERIALIZED VIEW conversion_funnel AS
|
||||
WITH stage_courses AS (
|
||||
-- registered
|
||||
(SELECT
|
||||
0 AS course_id,
|
||||
1 AS stage_id,
|
||||
'registered' AS stage_name,
|
||||
count(DISTINCT u.id) AS users_count
|
||||
FROM
|
||||
users u)
|
||||
UNION ALL
|
||||
-- enrolled
|
||||
(SELECT
|
||||
e.course_id,
|
||||
2 AS stage_id,
|
||||
'enrolled' AS stage_name,
|
||||
count(DISTINCT e.user_id) AS users_count
|
||||
FROM
|
||||
enrollments e
|
||||
GROUP BY
|
||||
e.course_id
|
||||
ORDER BY
|
||||
e.course_id)
|
||||
UNION ALL
|
||||
-- started
|
||||
(SELECT
|
||||
l.course_id,
|
||||
3 AS stage_id,
|
||||
'started' AS stage_name,
|
||||
count(DISTINCT lv.user_id) AS users_count
|
||||
FROM
|
||||
lessons l
|
||||
JOIN
|
||||
lesson_views lv ON l.id = lv.lesson_id
|
||||
GROUP BY
|
||||
l.course_id
|
||||
ORDER BY
|
||||
l.course_id)
|
||||
UNION ALL
|
||||
-- mid_progress
|
||||
(WITH lessons_mid AS (
|
||||
SELECT
|
||||
l.course_id,
|
||||
ceil(percentile_cont(0.5) WITHIN GROUP (ORDER BY l.id)) AS mid_in_lesson_id
|
||||
FROM
|
||||
lessons l
|
||||
GROUP BY
|
||||
l.course_id
|
||||
)
|
||||
SELECT
|
||||
lm.course_id,
|
||||
4 AS stage_id,
|
||||
'mid_progress' AS stage_name,
|
||||
count(lv.user_id) AS users_count
|
||||
FROM
|
||||
lessons_mid lm
|
||||
LEFT JOIN
|
||||
lesson_views lv ON lm.mid_in_lesson_id = lv.lesson_id
|
||||
GROUP BY
|
||||
lm.course_id, lm.mid_in_lesson_id
|
||||
ORDER BY
|
||||
lm.course_id)
|
||||
UNION ALL
|
||||
-- completed
|
||||
(WITH courses_lessons_id AS (
|
||||
SELECT
|
||||
l.course_id,
|
||||
l.id AS lesson_id
|
||||
FROM
|
||||
lessons l
|
||||
GROUP BY
|
||||
l.course_id, l.id
|
||||
),
|
||||
lessons_numbers AS (
|
||||
SELECT
|
||||
cli.course_id,
|
||||
cli.lesson_id,
|
||||
ROW_NUMBER() OVER(PARTITION BY cli.course_id ORDER BY cli.lesson_id DESC) AS lesson_number
|
||||
FROM
|
||||
courses_lessons_id cli
|
||||
)
|
||||
SELECT
|
||||
ln.course_id,
|
||||
5 AS stage_id,
|
||||
'completed' AS stage_name,
|
||||
count(lv.user_id) AS users_count
|
||||
FROM
|
||||
lessons_numbers ln
|
||||
LEFT JOIN
|
||||
lesson_views lv ON ln.lesson_id = lv.lesson_id
|
||||
WHERE
|
||||
ln.lesson_number = 1
|
||||
GROUP BY
|
||||
ln.course_id, ln.lesson_id
|
||||
ORDER BY
|
||||
ln.course_id)
|
||||
)
|
||||
SELECT
|
||||
sc.course_id,
|
||||
c.title AS course_title,
|
||||
sc.stage_name,
|
||||
sc.users_count,
|
||||
CASE
|
||||
WHEN lag(sc.users_count) OVER (PARTITION BY sc.course_id ORDER BY sc.stage_id) IS NULL THEN 'first stage'
|
||||
WHEN lag(sc.users_count) OVER (PARTITION BY sc.course_id ORDER BY sc.stage_id) = 0 THEN 0::text || '%'
|
||||
WHEN lag(sc.users_count) OVER (PARTITION BY sc.course_id ORDER BY sc.stage_id) IS NOT NULL THEN round((sc.users_count / lag(sc.users_count) OVER (PARTITION BY sc.course_id ORDER BY sc.stage_id)::NUMERIC) * 100, 0)::text || '%'
|
||||
END AS conversion_from_previous,
|
||||
round((sc.users_count / FIRST_VALUE(sc.users_count) OVER (ORDER BY sc.stage_id)::NUMERIC) * 100, 0)::text || '%' AS conversion_from_start
|
||||
FROM
|
||||
courses c
|
||||
RIGHT JOIN
|
||||
stage_courses sc ON c.id = sc.course_id
|
||||
ORDER BY
|
||||
sc.course_id;
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
CREATE MATERIALIZED VIEW course_summary AS
|
||||
WITH courses_unique_users AS (
|
||||
SELECT
|
||||
e.course_id,
|
||||
count(e.user_id) AS unique_users
|
||||
FROM
|
||||
enrollments e
|
||||
GROUP BY
|
||||
e.course_id
|
||||
),
|
||||
lessons_results AS (
|
||||
SELECT
|
||||
l.course_id,
|
||||
count(distinct l.id) AS lessons_count,
|
||||
count(lv.lesson_id) AS total_views,
|
||||
min(lv.viewed_at)::date AS first_viewed_at,
|
||||
max(lv.viewed_at)::date AS last_viewed_at
|
||||
FROM
|
||||
lessons l
|
||||
LEFT JOIN
|
||||
lesson_views lv ON l.id = lv.lesson_id
|
||||
GROUP BY
|
||||
l.course_id
|
||||
)
|
||||
SELECT
|
||||
c.id AS course_id,
|
||||
c.title AS course_title,
|
||||
cuu.unique_users,
|
||||
lr.lessons_count,
|
||||
lr.total_views,
|
||||
round(lr.total_views / cuu.unique_users::numeric, 2) AS avg_views_per_user,
|
||||
lr.first_viewed_at,
|
||||
lr.last_viewed_at
|
||||
FROM
|
||||
courses c
|
||||
JOIN
|
||||
courses_unique_users cuu ON c.id = cuu.course_id
|
||||
JOIN
|
||||
lessons_results lr ON c.id = lr.course_id
|
||||
ORDER BY
|
||||
c.id;
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
CREATE MATERIALIZED VIEW lesson_popularity_ranking as
|
||||
WITH lesson_views_results AS (
|
||||
SELECT
|
||||
lv.lesson_id,
|
||||
count(lv.user_id) AS total_views,
|
||||
count(DISTINCT lv.user_id) AS unique_viewers
|
||||
FROM
|
||||
lesson_views lv
|
||||
GROUP BY
|
||||
lv.lesson_id
|
||||
),
|
||||
enrollments_results AS (
|
||||
SELECT
|
||||
e.course_id,
|
||||
count(e.user_id) AS enrolled_to_course
|
||||
FROM
|
||||
enrollments e
|
||||
GROUP BY
|
||||
e.course_id
|
||||
)
|
||||
SELECT
|
||||
l.id AS lesson_id,
|
||||
l.title AS lesson_title,
|
||||
c.title AS course_title,
|
||||
lvr.total_views,
|
||||
lvr.unique_viewers,
|
||||
round(lvr.total_views / lvr.unique_viewers::numeric, 2) AS avg_views_per_viewer,
|
||||
dense_rank() OVER (ORDER BY lvr.total_views desc) AS popularity_rank,
|
||||
round((lvr.unique_viewers / er.enrolled_to_course::numeric) * 100, 0) || '%' AS completion_rate
|
||||
FROM
|
||||
lessons l
|
||||
JOIN
|
||||
courses c ON l.course_id = c.id
|
||||
JOIN
|
||||
lesson_views_results lvr ON l.id = lvr.lesson_id
|
||||
JOIN
|
||||
enrollments_results er ON c.id = er.course_id
|
||||
ORDER BY
|
||||
popularity_rank;
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
CREATE MATERIALIZED VIEW platform_summary as
|
||||
WITH users_count AS (
|
||||
SELECT
|
||||
count(*) AS total_users
|
||||
FROM
|
||||
users
|
||||
),
|
||||
courses_count AS (
|
||||
SELECT
|
||||
count(*) AS total_courses
|
||||
FROM
|
||||
courses
|
||||
),
|
||||
lessons_count AS (
|
||||
SELECT
|
||||
count(*) AS total_lessons
|
||||
FROM
|
||||
lessons
|
||||
),
|
||||
users_with_views AS (
|
||||
SELECT
|
||||
count(distinct user_id) AS users_with_views
|
||||
FROM
|
||||
lesson_views
|
||||
),
|
||||
views_count AS (
|
||||
SELECT
|
||||
count(*) AS total_views
|
||||
FROM
|
||||
lesson_views lv
|
||||
)
|
||||
SELECT
|
||||
uc.total_users,
|
||||
cc.total_courses,
|
||||
lc.total_lessons,
|
||||
uwv.users_with_views,
|
||||
round(lc.total_lessons / cc.total_courses::NUMERIC, 2) AS avg_lessons_per_course,
|
||||
round(vc.total_views / lc.total_lessons::NUMERIC, 2) AS avg_views_per_lesson
|
||||
FROM
|
||||
users_count uc
|
||||
CROSS JOIN
|
||||
courses_count cc
|
||||
CROSS JOIN
|
||||
lessons_count lc
|
||||
CROSS JOIN
|
||||
users_with_views uwv
|
||||
CROSS JOIN
|
||||
views_count AS vc;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
CREATE MATERIALIZED VIEW user_activity_summary AS
|
||||
SELECT
|
||||
u.id AS user_id,
|
||||
u.name,
|
||||
count(DISTINCT e.course_id) AS enrollment_count,
|
||||
count(DISTINCT lv.lesson_id) AS viewed_lessons_count,
|
||||
max(lv.viewed_at)::date AS last_view,
|
||||
min(lv.viewed_at)::date AS first_view,
|
||||
((count(DISTINCT lv.lesson_id)::numeric(5,2) / count(DISTINCT l.id)) * 100)::numeric(5, 2) AS engagement_rate
|
||||
FROM
|
||||
users u
|
||||
JOIN
|
||||
enrollments e ON u.id = e.user_id
|
||||
JOIN
|
||||
courses c ON e.course_id = c.id
|
||||
JOIN
|
||||
lessons l ON c.id = l.course_id
|
||||
LEFT JOIN
|
||||
lesson_views lv ON u.id = lv.user_id -- сюда - 'AND l.id = lv.lesson_id'
|
||||
GROUP BY
|
||||
u.id, u.name
|
||||
ORDER BY
|
||||
u.id;
|
||||
-- Кинул его в нейронку на проверку, она сказала что надо добавить 'AND l.id = lv.lesson_id' при присоединении таблицы lesson_views(сделал пометку в коде), это нужно чтобы точно проверить, что урок который посмотрел пользователь точно принадлежит его курсу, чтобы избежать ошибок из-за некорректных данные если такие появятся в результате какого либо сбоя или ошибки.
|
||||
@@ -0,0 +1,51 @@
|
||||
-- Задание 1
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
conversion_funnel
|
||||
WHERE
|
||||
stage_name = 'started'
|
||||
ORDER BY
|
||||
conversion_from_previous;
|
||||
-- Первые 2 курса, гже отавлилось больше всего учеников между этапами enrolled → started
|
||||
|
||||
|
||||
-- Задание 2
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
lesson_popularity_ranking lpr
|
||||
WHERE
|
||||
lpr.avg_views_per_viewer > 1
|
||||
LIMIT 3;
|
||||
|
||||
|
||||
-- Задание 3
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
user_cohort_analysis uca
|
||||
ORDER BY
|
||||
retention_rate DESC;
|
||||
-- Не разобрался как можжно соеденить с другими таблицам
|
||||
-- А retention_rate такой, наверное потому что при запуске курсов была пиар компания большая, и делали рассылки с напоминанием позаниматься, а потом перестали, вот и удержание похерилось
|
||||
|
||||
|
||||
-- Задание 4
|
||||
-- Витрина - user_activity_summary
|
||||
-- Всяко разно попробовал подобавлять индексы, итог: без индексов быстрее. Просмотрел весь запрос, вроде ничего не нужно менять - лишнего ничего нет.
|
||||
|
||||
-- Витрина - course_summary
|
||||
-- Тут также как и в предидущем - и так и сяк попробовал, план запроса не меняется, время не улучшается
|
||||
|
||||
-- Витрина - platform_summary
|
||||
-- Тут тоже нечего менять - всё из CROSS JOIN. Попробовал вместо count(*) писать count(id) думал мол в ширину будет меньше читать, в итоге выяснил что и так и так одинаково читает
|
||||
|
||||
-- Витрина - user_cohort_analysis
|
||||
-- И тут че не делай, все одна фигня. План вроде хороший.
|
||||
|
||||
-- Витрина - lesson_popularity_ranking
|
||||
-- Тут тоже ничего не вышло - я начниаю чувствовать себя тупым от того что не могу улучшить нигде время запроса.
|
||||
|
||||
-- Витрина - conversion_funnel
|
||||
-- Здесь тоже ничего не вышло - со стороны план запроса выглядит хорошо. Ускорить время запроса не вышло.
|
||||
Reference in New Issue
Block a user