sql - 无法正确查询 bigquery - 不支持引用其他表的相关子查询
问题描述
我有这样的桌子,
+---------+------------+-----------------+-----------------------------+
| id | event_name | event_params.key| event_params.value.int_value|
+---------+------------+-----------------+-----------------------------+
| 1 | click | stars | 12 |
+---------+------------+-----------------+-----------------------------+
| | | level | 1 |
+---------+------------+-----------------+-----------------------------+
| 5 | click | stars | 20 |
+---------+------------+-----------------+-----------------------------+
| | | level | 1 |
+---------+------------+-----------------+-----------------------------+
| 8 | click | stars | 100 |
+---------+------------+-----------------+-----------------------------+
| | | level | 2 |
+---------+------------+-----------------+-----------------------------+
我想要所有平均水平的星星的平均值,所以做了这样的事情,
SELECT level,
(SELECT AVG((
SELECT CAST(d.value.string_value as INT64)
FROM UNNEST(event_params)as d
WHERE (d.key = "stars"
))) as avg_star_at_level
FROM `table1`,UNNEST(event_params) as h
WHERE event_name = "click" AND (h.key = "level") AND
h.value.int_value = level)
FROM UNNEST(GENERATE_ARRAY(1,100)) as level
但我得到类似“不支持引用其他表的相关子查询”的信息。
所以我尝试了这个,
SELECT level,avg_token_at_level
FROM UNNEST(GENERATE_ARRAY(1,100)) as level,
(SELECT AVG((
SELECT CAST(d.value.string_value as INT64)
FROM UNNEST(event_params)as d
WHERE (d.key = "stars"
))) as avg_star_at_level
FROM `table1`,UNNEST(event_params) as h
WHERE event_name = "click" AND (h.key = "level")
AND h.value.int_value = level)
我得到了无法识别的名字:level。我怎样才能正确有效地查询?
我试图产生的结果:
+---------+------------+
| level | avg |
+---------+------------+
| 1 | 16.0 |
+---------+------------+
| 2 | 100.0 |
+---------+------------+
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
SELECT AVG(avg_star_at_level) avg_all_star FROM (
SELECT
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'level') level,
AVG((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'stars')) avg_star_at_level
FROM `project.dataset.table1`
GROUP BY level
)
结果
Row avg_all_star
1 58.0
推荐阅读
- python - 如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?
- javascript - 如何使用 javascript 检查 (alt + tab ) 是否被按下以及如何 1) 禁用它 2) 如何关闭当前浏览器
- python - 在 Pandas 中为 DataFrame 中的每一行返回多行
- google-apps-script - Google 表格脚本 - getLastRow 错误“目标范围的坐标超出了表格的尺寸”
- image - 从 GitHub 下载的 ZIP 中损坏的图像文件
- r - 对栅格时间序列进行排名
- php - 为什么这显示到多个小数位?
- wordpress - 从 /wp-admin/edit.php?post_type=course 添加查看权限。角色是作者
- excel - Visual Basic 运行 QBFC13Lib,SDK,运行 GeneralSummaryReportQuery,响应时,无法将列名称作为文本获取
- spline - 如何使用goemdl / nurbs在另一个b样条上的点的法线平面上找到b样条上的点