sql - BigQuery - 根据另一个事件参数选择事件参数值
问题描述
在我的应用中,每当用户打开某个视图时,我都会向 Firebase 分析发送一个事件“content_view”。此事件有两个与之关联的事件参数:content_type 和 title。content_type 始终是“音频”、“故事”、“视频”或“图像”,然后标题是不言自明的。
然后该数据进入 Big Query。
在 Big Query 中,我想按标题和事件数量列出观看次数最多的 5 个视频。我可以按标题获得前 5 个事件,但我不知道如何仅对 content_type = 'video' 的事件执行此操作。
有没有办法建立一个返回这样的查询?
+---------+-------------+--------------+
| Title | Total Views | Content Type |
+---------+-------------+--------------+
| Video 1 | 1000 | video |
| Video 2 | 900 | video |
| Video 3 | 800 | video |
| Video 4 | 700 | video |
| Video 5 | 600 | video |
+---------+-------------+--------------+
解决方案
以下是 BigQuery 标准 SQL,基于您提供的(并经过测试)架构
#standardSQL
SELECT
(
SELECT MAX(IF(key = 'title', value.string_value, NULL)) title
FROM UNNEST(event_params) param
WHERE (key = 'content_type' AND value.string_value = 'video')
OR key = 'title'
HAVING COUNT(1) = 2
) Title,
COUNT(1) TotalViews
FROM `project.dataset.table`
GROUP BY Title
HAVING NOT title IS NULL
ORDER BY TotalViews DESC
LIMIT 5
推荐阅读
- wpf - WPF:用户控件在设计时未在 ContentControl 的 Datatemplate 内显示
- java - 使用 while 循环重新运行程序后,异常方法不起作用
- r - 针织RMarkdown html_document中的Kable(kableExtra)垂直滚动条?
- java - android studio 中的 VINTF 清单是什么?有错误
- user-interface - 在用户登录 Firebase 和 SwiftUI 后创建配置文件
- javascript - Discord js检查反应用户角色
- javascript - 如何在Javascript中将数组从字符串转换为数字?
- c# - 无法从 DB 检索数据 -> 错误 -> 实体或复杂类型 ... 无法在 LINQ to Entities 查询中构造
- python - 如何在使用 python 抓取网站时获取标签的价值?
- javascript - 我在承诺中的承诺正在回归