我正在BigQuery中工作,并使用SQL来根据用户的参与度(级别范围为1-5)计算每个用户观看的平均广告数量。我之前曾根据用户的参与度来计算用户活跃的平均天数,但是当我根据用户的参与度来查看广告的平均数时,查询将失败。我的猜测是,所查看广告的字符串存储为字符串。
是否有基于参与度来平均事件列表中“已观看广告”发生次数的方法?
[我尝试更改提取“平均天数”时所用的原始代码以提取“观看过的广告”,但这不起作用。
我尝试了average(count(if(ads.viewed,1,0))),但是那也不起作用。我不知道自己在做什么错。
我也检查了此帖子(SQL average of string values),但这似乎不适用。
SELECT
engagement_level,
COUNT(event="ADSVIEWED") AS AverageAds
我也尝试过:
SELECT
engagement_level,
AVG(IF(event="ADSVIEWED",1,0)) AS AverageAds
但是那也不起作用。
它应该列出参与度和相应平均值的表。对于“平均天数”,它被确定为“参与度:平均天数”(1:2.45、2:3.21、3:4.67等)。但不适用于ads_viewed事件。
...根据每个用户的参与度来计算每个用户观看的平均广告数量...
下面是BigQuery标准SQL的内容>>
#standardSQL SELECT engagement_level, AVG(Ads) AverageAds FROM ( SELECT engagement_level, user_id, COUNTIF(event = 'ADSVIEWED') Ads FROM `project.dataset.table` GROUP BY engagement_level, user_id ) GROUP BY engagement_level
您可以像下面的示例一样使用虚拟数据来测试,玩耍上面的游戏>]
#standardSQL WITH `project.dataset.table` AS ( SELECT 1 user_id, 1 engagement_level, 'ADSVIEWED' event UNION ALL SELECT 1, 1, 'a' UNION ALL SELECT 1, 1, 'ADSVIEWED' UNION ALL SELECT 2, 1, 'b' UNION ALL SELECT 2, 1, 'ADSVIEWED' ) SELECT engagement_level, AVG(Ads) AverageAds FROM ( SELECT engagement_level, user_id, COUNTIF(event = 'ADSVIEWED') Ads FROM `project.dataset.table` GROUP BY engagement_level, user_id ) GROUP BY engagement_level
有结果
Row engagement_level AverageAds 1 1 1.5