Коррелированные подзапросы с использованием Ecto
Как бы вы пошли о написании коррелированного подзапроса в Ecto
?
Например, что будет эквивалентно SQL SELECT
запрос:
--Heaviest Lemmings per Group
SELECT ld.group_name, ld.id, ld.name, ld.weight
FROM lemming_data ld
WHERE weight = (
SELECT max(weight)
FROM lemming_data
WHERE group = ld.group_name
);
в Ecto
синтаксис? Я не уверен, как ссылаться на внешний запрос group_name
,
1 ответ
Решение
Сопутствующие подзапросы невозможны в Ecto без использования фрагментов. Так что это будет что-то вроде:
from ld in "lemming_data",
where: ld.weight in fragment("(SELECT max(weight) FROM lemming_data WHERE group = ?)", ld.group_name),
select: ld # or {ld.group_name, ld.id, ld.name, ld.weight}
или же:
from ld in "lemming_data",
where: fragment("? = (SELECT max(weight) FROM lemming_data WHERE group = ?)", ld.weight, ld.group_name),
select: ld # or {ld.group_name, ld.id, ld.name, ld.weight}