Как узнать общее количество сыгранных сессий в BigQuery? - PullRequest
0 голосов
/ 26 марта 2020

Как узнать общее количество сессий, сыгранных всеми пользователями за месяц. Событие user_engagement имеет параметр счетчик сеансов , который увеличивается на каждый сеанс. Проблема в том, что пользователь, который играет 10 сеансов, будет иметь счетчик сеансов от 1 до 10. Итак, как мне добавить только максимальное количество сеансов, т.е. 10 в этом случае, и аналогично для всех пользователей.

SELECT
  SUM(session_count) AS total_sessions,
  COUNT(DISTINCT user_pseudo_id) AS users
FROM
  `xyz.analytics_111.events_*`

WHERE
  event_name = "user_engagement" AND (_TABLE_SUFFIX BETWEEN "20200201" AND "20200229")
  AND platform = "ANDROID"

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Мне неясно, как выглядят ваши данные. Если в сеансе есть одна строка, вы можете просто использовать:

SELECT COUNT(*) AS total_sessions,
       COUNT(DISTINCT user_pseudo_id) AS users
. . .

Если вы можете иметь несколько событий в сеансе, вы можете использовать хакерский подход:

SELECT COUNT(DISTINCT CONCAT(user_pseudo_id, ':', CAST(session_count as string)))

Я предлагаю это потому, что иногда в сложном запросе проще просто настроить одну строку. В противном случае решение Михаила является разумным.

Однако я бы предложил вместо этого оконные функции:

SELECT SUM(CASE WHEN seqnum = 1 THEN session_count END) AS total_sessions,
       COUNT(DISTINCT user_pseudo_id) AS users
FROM (SELECT e.*,
             ROW_NUMBER() OVER (PARTITION BY user_pseudo_id ORDER BY session_count DESC) as seqnum
      FROM `xyz.analytics_111.events_*`
      WHERE e.event_name = 'user_engagement' AND
            _TABLE_SUFFIX BETWEEN '20200201' AND '20200229' AND
            platform = 'ANDROID'
    ) e;

Причина, по которой я рекомендую это, заключается в том, что вы можете сохранить оставшиеся вычисления без их изменения. Это удобно в сложном запросе.

1 голос
/ 26 марта 2020

Попробуйте ниже (BigQuery Standard SQL)

#standardSQL
SELECT
  SUM(session_count) AS total_sessions,
  COUNT(user_pseudo_id) AS users
FROM (
  SELECT user_pseudo_id, MAX(session_count) session_count
  FROM `xyz.analytics_111.events_*`
  WHERE event_name = "user_engagement" 
  AND _TABLE_SUFFIX BETWEEN "20200201" AND "20200229"
  AND platform = "ANDROID"
  GROUP BY user_pseudo_id
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...