Advertisement
AlexErin1308

Расчёт Retention Rate: практика. Часть 2.Task #1-5

Jun 18th, 2024
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PostgreSQL 3.86 KB | Source Code | 0 0
  1. --1.Создайте таблицу, где будут пользователи, зарегистрированные в январе 2020 года. Кроме того, отобразите ещё одно поле, где будет представлено общее количество этих пользователей.
  2. SELECT user_id, COUNT(*) OVER(PARTITION BY DATE_TRUNC('month', created_at)::date)
  3. FROM tools_shop.users
  4. WHERE DATE_TRUNC('month', created_at)::date = '2020-01-01'
  5.  
  6. --2.Отобразите все записи с событиями с платформы android таблицы tools_shop.events с января по март 2020 года включительно.
  7. SELECT *
  8. FROM tools_shop.events
  9. WHERE platform = 'android' AND DATE_TRUNC('day', event_time)::date BETWEEN '2020-01-01' AND '2020-03-31'
  10.  
  11. --3.Объедините таблицы, полученные в предыдущих запросах, по полю user_id.Важно! Укажите во FROM сначала таблицу с событиями и присоединяйте к ней таблицу с пользователями, но не наоборот.
  12. WITH users_mnt AS (
  13.           SELECT user_id, COUNT(*) OVER(PARTITION BY DATE_TRUNC('month', created_at)::date)
  14.           FROM tools_shop.users
  15.           WHERE DATE_TRUNC('month', created_at)::date = '2020-01-01'),      
  16.      events_mnt AS (
  17.           SELECT *
  18.           FROM tools_shop.events
  19.           WHERE platform = 'android' AND DATE_TRUNC('day', event_time)::date BETWEEN '2020-01-01' AND '2020-03-31')
  20. SELECT *
  21. FROM events_mnt e JOIN users_mnt u ON e.user_id = u.user_id
  22.  
  23. --4.Сгруппируйте данные по месяцу события (в виде '2020-01-01 00:00:00') и количеству зарегистрированных пользователей. Посчитайте число уникальных пользователей в таблице tools_shop.events. В итоговой таблице должно быть три поля:
  24. месяц события,
  25. общее количество зарегистрированных пользователей,
  26. число уникальных вернувшихся пользователей по месяцам.
  27. Отсортируйте таблицу по двум полям — по месяцу события и количеству зарегистрированных пользователей.
  28. WITH profiles as (
  29.      SELECT user_id,  
  30.      COUNT(user_id) OVER () AS user_cnt FROM tools_shop.users
  31.      WHERE (created_at::date) BETWEEN '2020-01-01' AND '2020-01-31'
  32. ),
  33. events as (
  34.     SELECT *
  35.     FROM tools_shop.events
  36.     WHERE ((event_time::date) BETWEEN '2020-01-01' AND '2020-03-31')
  37.     AND platform = 'android')
  38. SELECT CAST(DATE_TRUNC('month', event_time)as TIMESTAMP) as month,
  39.        user_cnt,
  40.        COUNT(DISTINCT events.user_id) AS cnt_user
  41. FROM events JOIN profiles ON events.user_id = profiles.user_id
  42. GROUP BY month, user_cnt
  43. ORDER BY month, user_cnt
  44.  
  45. --5.Вместо подсчёта количества пользователей подсчитайте долю. Не забудьте перевести делимое в тип numeric для корректного деления.
  46. WITH profiles as (
  47.      SELECT user_id,  
  48.      COUNT(user_id) OVER () AS user_cnt FROM tools_shop.users
  49.      WHERE (created_at::date) BETWEEN '2020-01-01' AND '2020-01-31'
  50. ),
  51. events as (
  52.     SELECT *
  53.     FROM tools_shop.events
  54.     WHERE ((event_time::date) BETWEEN '2020-01-01' AND '2020-03-31')
  55.     AND platform = 'android')
  56. SELECT CAST(DATE_TRUNC('month', event_time)as TIMESTAMP) as month,
  57.        user_cnt,
  58.        COUNT(DISTINCT events.user_id)::numeric / user_cnt::numeric AS rr_user
  59. FROM events JOIN profiles ON events.user_id = profiles.user_id
  60. GROUP BY month, user_cnt
  61. ORDER BY month, user_cnt
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement