如何根据用户 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:
现在,如果您愿意,请提供您提供的额外详细信息
获取每个用户访问的关卡的 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中,如何根据分类列中每个级别的比例从表中随机抽样?