Поиск соотношения DAU / MAU в SQL

#sql #postgresql

#sql #postgresql

Вопрос:

Есть таблица со столбцами CustomerID, timestamp, activity, и я нашел DAU (DailyActiveUsers) и MAU (MonthlyActiveUsers) из этой таблицы. Теперь мне нужно найти DAU / MAU. Проблема в том, что я получил DAU и MAU как два отдельных запроса, поскольку их нужно сгруппировать по дням и месяцам соответственно.

Кроме того, DAU будет таблицей, поскольку она сгруппирована по дням и будет содержать 30 строк в таблице. MAU — это всего лишь одно число. Как я могу найти DAU / MAU, который, по-видимому, является соотношением?

Мой запрос для DAU

 select date, count(distinct customerID) as dau
from table
where extract(month from timestamp) = 1 and extract(year from timestamp) = 2020
  and activity = 'opened_the_app'
group by date
 

Это дает мне dau за все 31 день в январе месяце.

Аналогичным образом я нашел MAU, сгруппировав месяц, который дает мне одно значение для января месяца.

Как я могу найти соотношение DAU / MAU за январь?

Комментарии:

1. Пожалуйста, укажите используемую вами базу данных.

Ответ №1:

Вы можете объединить их вместе:

 select d.*, d.dau * 1.0 / m.mau
from (select date, count(distinct customerID) as dau
      from table
      where timestamp >= '2020-01-01' and
            timestamp < '2020-02-01' and 
            activity = 'opened_the_app'
      group by date
     ) d cross join
     (select count(distinct customerID) as mau
      from table
      where timestamp >= '2020-01-01' and
            timestamp < '2020-02-01' and 
            activity = 'opened_the_app'
     ) m
 

Ответ №2:

Вы можете найти его из самой таблицы DAU, поскольку MAU будет суммой DAU

 select dau/sum(dau) as result from (
        select date, count(distinct customerID) as dau
        from table
        where extract(month from timestamp) = 1 and extract(year from timestamp) = 2020
        and activity = 'opened_the_app'
    ) dau_table