【问题标题】:How to compute the average event frequency over a partition in BigQuery如何计算 BigQuery 中分区的平均事件频率
【发布时间】:2020-01-30 05:14:28
【问题描述】:

我有一个 BigQuery 表,它本质上是给定用户会话的事件跟踪。我想在示例中按轨道对数据进行分区,并生成在轨道上平均的事件频率分布。

跟踪事件名称 1个 1乙 1℃ 2个 3个 3乙

因此对于这些数据,结果将是

A - 100% 乙 - 66% C - 33%

也就是说所有轨道都包含事件 A,66% 的轨道包含事件 B,33% 的轨道包含事件 C。

我想使用 SQL 和 PARTITION BY 中的分析函数来执行此操作,但不确定如何进行。谢谢!

【问题讨论】:

  • 您是否有固定数量的事件(即只有 A、B、C)?使用 CTE 和左连接将相当容易,您是否需要使用分析函数?
  • 是的,事件名称是枚举的(有限集)——我不需要使用分析函数,这正是我在 SQL 方面的相对非专业知识所导致的。

标签: google-bigquery partition data-partitioning


【解决方案1】:

以下是 BigQuery 标准 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   

【讨论】:

    【解决方案2】:

    如果你想使用分区,你可以这样做:

    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
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2021-10-21
      相关资源
      最近更新 更多