Подсчет населения членских групп в Престо - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу понять, как пользователи заходят на мой сайт.

Существует таблица с событиями точки входа. Столбцы: 1) дата
2) тип точки входа
3) идентификатор пользователя

Я хочу вывод, например
Только домашняя страница - 1 млн пользователей
Домашняя страница и поиск - 2 млн пользователей
Только поиск - 1,5 млн пользователей

Какие соединения мне нужно сделать, чтобы получить этот вывод?

Вот код, который я начинаю с

select
    cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) ds
    ,entrypointtype
    ,user_id
from
    bizinsights.events_entrypoints_clientevents
where
    eventtype = 'Click'
    and cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) >= '2020-01-01'

1 Ответ

1 голос
/ 11 апреля 2020

Агрегируйте дважды. Следующее разбивает вещи на счет домашней страницы и поиска:

select ds, num_homepage, num_search, count(*) as num_users
from (select user_id, 
             cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) as ds
             sum(case when entrypoint = 'homepage' then 1 else 0 end) as num_Homepage,
             sum(case when entrypoint = 'search' then 1 else 0 end) as num_search
      from bizinsights.events_entrypoints_clientevents
      where eventtype = 'Click' and
            cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) >= '2020-01-01'
      group by user_id, ds
     ) u
group by ds, num_homepage, num_search
order by ds, num_homepage, num_search;

Это больше, чем вы просите. Вместо:

select ds,
       count_if(is_Homepage = 1 and is_Search = 1) as both,
       count_if(is_Homepage = 1 and is_Search = 0) as homepage_only,
       count_if(is_Homepage = 1 and is_Search = 1) as search_only
from (select user_id, 
             cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) as ds
             max(case when entrypoint = 'homepage' then 1 else 0 end) as is_Homepage,
             max(case when entrypoint = 'search' then 1 else 0 end) as is_search
      from bizinsights.events_entrypoints_clientevents
      where eventtype = 'Click' and
            cast(date_parse(substr(sessions.datehour, 1, 8),'%Y%m%d') as date) >= '2020-01-01'
      group by user_id, ds
     ) u
group by ds
order by ds;
...