У меня есть ситуация, когда я выполняю соединение между двумя таблицами, и мне нужно, чтобы значение из одной таблицы использовалось как фактор LIMIT для подзапроса в соединении.Предположим, у меня есть следующие [чрезвычайно упрощенные] таблицы -
data:
experiment_id | value
--------------|--------
1 | 2.5
1 | 2.6
1 | 4.5
1 | 2.3
1 | 3.5
1 | 2.8
2 | 2.3
2 | 1.2
2 | 1.1
2 | 3.6
2 | 3.8
2 | 4.1
2 | 7.9
2 | 4.2
2 | 1.0
data_clip:
experiment_id | clip_index
--------------|------------
1 | 3
2 | 5
Мне нужно суммировать отсортированные значения каждого эксперимента до определенного clip_index, который варьируется между экспериментами.Итак, моя таблица результатов в идеале должна выглядеть следующим образом:
results:
experiment_id | sum
--------------|-------
1 | 7.6 # => 2.3 + 2.5 + 2.8
2 | 13.0 # => 1.0 + 1.1 + 1.2 + 2.3 + 3.6 + 3.8
Как правило, я бы сделал этот расчет с некоторыми сценариями на стороне клиента (ruby, python и т. Д.), Но я хотел попробовать сделать это науровень дб.Некоторые воображаемые SQL могут выглядеть следующим образом (я знаю, что с этим запросом все неправильно):
SELECT
T0.experiment_id as `id`,
(SELECT SUM(x.value) from
(SELECT value
FROM data
WHERE experiment_id = t0.experiment_id
ORDER BY value
LIMIT t0.clip_index ) as x) AS `sum`
FROM data_clip AS t0
Несколько проблем:
- LIMITдолжен быть определен с константой (1000, 10 и т. д.), а не столбцом.
- условие
WHERE
в подзапросе не выполняется из-за не распознавания таблицы t0
, которая является внешней для подзапроса.
Мой вопрос в основном состоит в том, как достичь предела и суммы переменных между двумя таблицами, используя в основном SQL.Я думал об использовании group_concat
и substring_index
для изоляции значений до clip_index
для каждой строки, но затем возникла проблема суммирования пронумерованных строк ("1.2,2.3,3.2"
) и ограничения сервера на размер group_concat
буфер (настраивается, но значения могут быть около ~ 100k за эксперимент).Какие-нибудь мысли?Спасибо.