我有大约100,000名用户ID谁是访问n数量的水平。我需要找到的用户和每个访问水平的整体中位数。
我试过根据每个级别的ID数和启动应用程序的总ID数来使用AVG。值变化很大。
找出启动应用程序的人。
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的数量谁启动了应用程序,以获得平均水平访问的每个用户。有没有办法找到一个中位数?
2条答案
按热度按时间m1m5dgzv1#
这个问题没有足够的细节来给出一个完整的答案,但是有了你给我们的元素:
AVG
,当你需要MEDIAN
时要计算中位数,您可以执行以下操作:
字符串
bqutil.fn.median()
是我们与世界共享的公共UDF:现在,根据你提供的额外细节,如果你想
获取每个用户访问的级别的平均值
,然后:
型
emeijp432#
我建议使用APPROX_QUANTILES({field},4)[2]而不是fhoffa.x.median,因为在现实世界的大规模查询中,后者更有可能陷入“查询无法在分配的内存中执行”的麻烦。