当所有数据都存储为字符串时,是否可以计算事件发生的平均次数?

问题描述 投票:0回答:1

我正在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事件。

sql google-bigquery
1个回答
0
投票

...根据每个用户的参与度来计算每个用户观看的平均广告数量...

下面是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  
© www.soinside.com 2019 - 2024. All rights reserved.