Есть ли способ подсчитать среднее число случаев, когда происходит событие, когда все данные хранятся в виде строки? - PullRequest
0 голосов
/ 25 октября 2019

Я работаю в BigQuery и использую SQL для вычисления среднего количества просмотров рекламы на пользователя на основе уровня их вовлеченности (уровни варьируются от 1 до 5). Ранее я рассчитывал среднее количество дней, в течение которых пользователи были активны, исходя из их уровня вовлеченности, но когда я делаю среднее количество просмотров объявлений на основе уровня вовлеченности, запрос не выполняется. Я предполагаю, что строка для просматриваемых объявлений хранится в виде строки.

Есть ли способ усреднить количество просмотров объявления в списке событий на основе вовлеченности?

Я попытался изменить исходный код, который я использовал, когда извлек «Среднее количество дней», чтобы извлечь «Просмотренные объявления», но это не работает.

Я попытался усреднить (считать (если (ads.viewed, 1,0))), но это тоже не сработает. Я не могу понять, что я делаю неправильно.

Я также проверил этот пост ( Среднее значение SQL для строковых значений ), но, похоже, это не применимо.

    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.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Если я правильно понимаю, вы можете сделать это без подзапроса:

SELECT engagement_level,
       COUNTIF(event = 'ADSVIEWED') / COUNT(DISTINCT user_id) as avg_per_user
FROM t
GROUP BY engagement_level;

Это подсчитывает количество событий и делит на количество пользователей. Если вы хотите подсчитать только пользователей, у которых есть событие:

SELECT engagement_level,
       COUNT(*) / COUNT(DISTINCT user_id) as avg_per_user
FROM t
WHERE event = 'ADSVIEWED'
GROUP BY engagement_level;
0 голосов
/ 25 октября 2019

... для расчета среднего количества объявлений, просмотренных на пользователя, на основе уровня их вовлеченности ...

Ниже приведен стандарт SQL для BigQuery

#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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...