【问题标题】:Select two distinct colums in bigquery based on third colums value根据第三列值在 bigquery 中选择两个不同的列
【发布时间】:2019-09-26 08:33:47
【问题描述】:

我有一些来自 Google Analytics 的广告系列数据,我想用 SQL 在 Bigquery 中处理这些数据。有两个维度列,活动和广告内容,以及一个指标,会话。 如果不是一些流量带有错误的广告系列参数并且我最终得到一个看起来很糟糕的表格,那将很简单。我现在要做的是将会话“分组”到一个广告内容和会话数最多的活动中。

我尝试了一些不同的选项来加入 TOP,但这总是有两个不同的表,我无法让它在这里工作。

表格

adcontent       campaign            sessions
adcontent_1     campaign_1          57
adcontent_1     wrong_campaign_1    1
adcontent_2     campaign_2          102
adcontent_2     wrong_campaign_1    3

结果表:

adcontent   campaign    sessions
adcontent_1 campaign_1  58
adcontent_2 campaign_2  105

【问题讨论】:

    标签: sql google-analytics google-bigquery


    【解决方案1】:

    您似乎希望保留会话最多的广告系列名称。 BigQuery 没有“第一”聚合函数,但您可以使用:

    select adcontent,
           array_agg(campaign order by sessions desc limit 1)[safe_ordinal(1)] as leading_campaign
           sum(sessions) as sessions
    from t
    group by adcontent;
    

    下面是代码示例:

    with t as (
          SELECT 'adcontent_1' as adcontent, 'campaign_1' as campaign, 57 as sessions union all
          SELECT 'adcontent_1', 'wrong_campaign_1', 1 union all
          SELECT 'adcontent_2', 'campaign_2', 102 union all
          SELECT 'adcontent_2', 'wrong_campaign_1', 3 UNION ALL
          SELECT 'adcontent_3', 'campaign_3', 42 union all
          SELECT 'adcontent_3', 'bad_campaign_3', 4
         )
    select adcontent,
           array_agg(campaign order by sessions desc limit 1)[safe_ordinal(1)] as leading_campaign,
           sum(sessions) as sessions
    from t
    group by adcontent;
    

    【讨论】:

      【解决方案2】:

      使用聚合

      adcontent,min(campaign),sum(sessions) from table 
      group by adcontent
      

      【讨论】:

      • 哇。很简单!谢谢
      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多