Как вычислить среднюю частоту событий по разделу в BigQuery - PullRequest
0 голосов
/ 01 октября 2019

У меня есть таблица BigQuery, которая по сути является трассировкой событий для данного пользовательского сеанса. Я хотел бы разделить данные по дорожкам в примере и произвести распределение частот событий, усредненных по дорожкам.

track Event Name
1     A
1     B
1     C
2     A
3     A
3     B

Таким образом, для этих данных результат будет

A - 100%B - 66% C - 33%

То есть все треки содержат событие A, 66% треков содержат событие B и 33% треков содержат событие C.

Мне бы хотелосьсделать это с аналитическими функциями в SQL и PARTITION BY, но не знаю, как поступить. Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT DISTINCT event, 
  ROUND(100 * COUNT(1) OVER(PARTITION BY event) / COUNT(DISTINCT track) OVER(), 2) frequency
FROM `project.dataset.table`  

, если применить к образцу данных из вашего вопроса - результат

Row event   frequency    
1   A       100.0    
2   B       66.67    
3   C       33.33   
0 голосов
/ 01 октября 2019

Если вы хотите использовать разбиение, вы можете сделать это следующим образом:

select event, 
   round( (count(track)/count(distinct event))/count(distinct event) over () * 100, 2) as perc
   from (
      select distinct
         event, 
         track
      from `yourdataset.table`
   )
group by 1

Надеюсь, это поможет.

...