#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