Как получить группы "session_start", "user" и "screenviews" по "версии приложения"? Firebase BigQuery SQL - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в BigQuery с Firebase, и я пытаюсь получить количество пользователей и групп сеансов по версиям приложения (device.operating_system_version).

До сих пор у меня работал этот код (но без группыby)

SELECT 
  COUNT(DISTINCT user_pseudo_id) AS all_users,
  (
    SELECT
      COUNT(user_pseudo_id)
    FROM
      `xxxx.analytics_xxxx.events_20191105`
    WHERE
      event_name = 'session_start'
  ) AS session,
  (
  SELECT
      COUNT(event_name) as totalScreen
    FROM
      `xxxx.analytics_xxxx.events_20191105`
    WHERE
      event_name = 'newScreen'
  ) AS screenView
FROM `xxxx.analytics_xxxx.events_20191105`

Результат в порядке:

Row | all_users | session | screenView
1   | 80        | 150     | 550

Но когда я пытаюсь сгруппировать по версии приложения, количество пользователей является правильным и разным для каждой версии приложения, кроме числасессий и screenViews всегда одинаковы для всех версий приложения. Код следующий:

SELECT 
  device.operating_system_version AS os_Version,
  COUNT(DISTINCT user_pseudo_id) AS all_users,
  (
    SELECT
      COUNT(user_pseudo_id)
    FROM
      `xxxx.analytics_xxxx.events_20191105`
    WHERE
      event_name = 'session_start'
  ) AS session,
  (
  SELECT
      COUNT(event_name) as totalScreen
    FROM
      `xxxx.analytics_xxxx.events_20191105`
    WHERE
      event_name = 'newScreen'
  ) AS screenView
FROM `xxxx.analytics_xxxx.events_20191105`
GROUP BY os_Version

Результат:

Row | os_Version | all_users | session | screenView
1   | 9          | 14        | 150     | 550
2   | 6.0.1      | 4         | 150     | 550
3   | 8.0.0      | 9         | 150     | 550
4   | 7.0        | 3         | 150     | 550
...

Я не понимаю этого поведения. Это похоже на то, что «Group BY» был применен только к «пользователю», а не к подзапросам.

Спасибо

1 Ответ

1 голос
/ 07 ноября 2019

It is like if the "Group BY" was only applied on the "user" and not on the subqueries. Это именно то, что происходит, подзапросы возвращают одинаковые результаты для каждой группы os_Version.

Я бы переписал запрос следующим образом:

select
  device.operating_system_version as os_Version,
  count(distinct user_pseudo_id) as all_users,
  count(case when event_name = 'session_start' then 1 else null end) as session,
  count(case when event_name = 'newScreen' then 1 else null end) as screenView
from `xxxx.analytics_xxxx.events_20191105`
group by 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...