如何解决只需要找到每个故事和国家/地区的最高级别的用户
因此,我一直在处理庞大的数据集,我只需要查找每个国家/地区每个故事最终层的用户。例如。巴西的故事A有15个级别,因此我只需要用户在该故事的15级存在。在故事E中,共有28个级别,因此对于每个国家/地区,我只需要该故事中处于第28级的用户即可。
我当前正在使用此查询,但这会获取所有级别的用户。
SELECT
event,story,country,level,COUNT(DISTINCT id) uniques
FROM
`xyz`
WHERE
(date between "2020-08-01" and "2020-08-07")
AND event in ("start")
GROUP BY
event,level
ORDER BY
country,level
我已经在图像上附加了虚拟数据,突出显示(黄色)需要提取的数据点。
参考图片:在故事A中,只有1970年巴西用户和英国81位用户以及美国301位用户的最高15级水平。
[
解决方法
如果您想要每个国家/故事最多的故事,请使用窗口功能:
SELECT event,story,country,level,COUNT(DISTINCT id) as uniques
FROM (SELECT x.*,MAX(level) OVER (PARTITION BY story,country) as max_level
FROM `xyz` x
WHERE date between '2020-08-01' and '2020-08-07') AND
event in ('start')
) x
WHERE level = max_level
GROUP BY event,level
ORDER BY country,level
,
BigQuery Standard SQL的替代版本-只需用“少量额外内容”包装初始查询即可
#standardSQL
SELECT event,ARRAY_AGG(STRUCT(level,uniques) ORDER BY level DESC LIMIT 1)[OFFSET(0)].*
FROM (
SELECT event,COUNT(DISTINCT id) AS uniques
FROM `project.dataset.table`
WHERE date BETWEEN '2020-08-01' AND '2020-08-07'
AND event IN ('start')
GROUP BY event,level
)
GROUP BY event,country
应用于问题中的样本数据时-结果为
Row event story country level uniques
1 start A B 15 2
2 start E B 28 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。