У меня есть таблица примерно такая,
+---------+------------+-----------------+-----------------------------+
| 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 | avg |
+---------+------------+
| 1 | 16.0 |
+---------+------------+
| 2 | 100.0 |
+---------+------------+