根据第三列的值在bigquery中选择两个不同的列

时间:2019-09-26 08:33:47

标签: sql google-analytics google-bigquery

我有一些来自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

2 个答案:

答案 0 :(得分:0)

使用聚合

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

答案 1 :(得分:0)

您似乎想保留会话次数最多的广告系列名称。 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;