Есть две таблицы:
1. Справочник парамтеров
params с полями
id и
title
2. Таблица значений параметров
data, содержащая столбцы
p_id (идентификатор параметра) и
value (для одного идентификатора параметра могут быть тысячи разных значений).
Задача: в коррелированном запросе вытащить среднее из 50 наибольших значений для заданных параметров, база MySQL 5.7
Если решать в лоб, то кажется, что можно написать так:
SELECT title,
(SELECT AVG(value) FROM (SELECT value FROM data WHERE p_id=id ORDER BY value DESC LIMIT 50) AS t1)
FROM params WHERE id IN (347, 564, 252, 256) ORDER BY title
Однако, запрос завершается с ошибкой "#1054 - Неизвестный столбец 'id' в 'where clause'" т.е. в подзапросе скорелированного запроса уже не видно поле родителя.
Каким образом можно сделать требуемую выборку?