根据第三列值在 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 中选择两个不同的列的主要内容,如果未能解决你的问题,请参考以下文章
PySpark Dataframe 将两列转换为基于第三列值的元组新列