如何根据用户 ID 和 ID 访问的级别数使用 Google BigQuery 查找中位数?

Posted

技术标签:

【中文标题】如何根据用户 ID 和 ID 访问的级别数使用 Google BigQuery 查找中位数?【英文标题】:How to find median using Google BigQuery based on both the user id and the number of levels the ID has visited? 【发布时间】:2019-11-05 04:23:53 【问题描述】:

我有大约 100,000 个访问 n 个级别的用户 ID。我需要找到每个用户访问的用户和级别的总体中位数。

我尝试根据每个级别的 ID 数量和启动应用程序的 ID 总数来使用 AVG。值变化很大。

查找启动应用程序的 ID。

SELECT 
event_names, COUNT(DISTINCT id) uniques, COUNT(id) AS total 
FROM xyz.analytics_111.xyz 
WHERE (date BETWEEN "20191018" AND "20191024") AND version = "3.1" AND event_names in ("app_open","internet") AND platform = "android" 
AND id IN ( SELECT DISTINCT id FROM abc.analytics_111.abc WHERE event_names = "internet" AND internet_status = 1 ) 
GROUP BY event_names

查找每个级别的用户总数。

SELECT event_names, story_name, level, COUNT(DISTINCT id) uniques, COUNT(id) AS total 
FROM xyz.analytics_111.xyz WHERE (date BETWEEN "20191018" AND "20191024") AND version = "3.1" AND event_names in ("start_level","end_level") AND platform = "ANDROID" AND id IN ( SELECT DISTINCT id FROM abc.analytics_111.abc 
WHERE event_names = "internet" AND internet_status = 1 ) 
GROUP BY event_names, story_name, level ORDER BY event_names DESC, story_name, level

在此之后,我将所有级别的用户 ID 总数除以启动应用程序的用户 ID 数,以获得每个用户访问的级别的 AVG。有没有办法找到中位数?

【问题讨论】:

您可以粘贴您尝试过的查询吗? 请编辑问题以将所有内容放在一起,并说明您期望的结果中位数。 【参考方案1】:

这个问题没有足够的细节来提供完整的答案,但是你给我们的元素:

当你想要MEDIAN时不要使用AVG

要计算中位数,您可以执行以下操作:

SELECT level_id, fhoffa.x.median(ARRAY_AGG(some_number))
FROM `table`
GROUP BY level_id

bqutil.fn.median() 是我们与全世界共享的公共 UDF:

https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83

现在,如果您愿意,请提供您提供的额外详细信息

获取每个用户访问的关卡的 AVG

,然后:

SELECT AVG(levels) avg_levels_for_users
FROM (
  SELECT id user, COUNT(DISTINCT level) levels
  FROM `....`
  GROUP BY user
)

【讨论】:

谢谢!它就像一个魅力。我使用 fhoffa.x.median(ARRAY_AGG(some_number)) 进行查询。

以上是关于如何根据用户 ID 和 ID 访问的级别数使用 Google BigQuery 查找中位数?的主要内容,如果未能解决你的问题,请参考以下文章

在PostgreSQL中,如何根据分类列中每个级别的比例从表中随机抽样?

sql 按单位,评估状态,评估年份,评估级别和单位部门的所有人员计算员工ID数

如何通过匹配xslt中的id来确定元素的级别?

如何在g套件中路由传入的非用户电子邮件ID

根据用户id查询菜单列表(菜单权限问题)

根据用户id查询菜单列表(菜单权限问题)