Коррелированные подзапросы с использованием 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}
Другие вопросы по тегам