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

Posted

技术标签:

【中文标题】根据第三列值在 bigquery 中选择两个不同的列【英文标题】:Select two distinct colums in bigquery based on third colums value 【发布时间】: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

【问题讨论】:

【参考方案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

【讨论】:

哇。很简单!谢谢

以上是关于根据第三列值在 bigquery 中选择两个不同的列的主要内容,如果未能解决你的问题,请参考以下文章

比较两个excel的两列并返回第三列

基于两个不同列值突出显示/着色整行的条件格式公式

PySpark Dataframe 将两列转换为基于第三列值的元组新列

根据第三列动态选择两列之一[重复]

如何根据第三列绘制具有不同颜色的线图? (KeyError:0)

更改 bigquery 中的列值