I have table something like this,
+---------+------------+-----------------+-----------------------------+
| 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 |
+---------+------------+-----------------+-----------------------------+
I want average of all average of stars in level, so did some thing like this,
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
But I get something like this "Correlated subqueries that reference other tables are not supported".
So I tried this,
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)
I got Unrecognized name: level. How could I query correctly and efficiently?
Result I am trying to produce:
+---------+------------+
| level | avg |
+---------+------------+
| 1 | 16.0 |
+---------+------------+
| 2 | 100.0 |
+---------+------------+