尝试做这样的事情:

(from f in Foo,
 where: f.bar >= ^bar,
 order_by: f.cost1 + f.cost2,
 limit: 1) |> Repo.one

但是它不喜欢提示无效的表达方式。

还尝试了以下方法:
(from f in Foo,
 select: %{id: id, total: fragment("cost1 + cost2 as total")},
 order_by: f.total,
 limit: 1) }> Repo.one

这并不表示“f.total”列不存在。

任何想法如何使此查询工作?

最佳答案

我不确定为什么Ecto不支持order_by: f.cost1 + f.cost2,但是您的fragment语法不正确。这是正确的语法:

(from f in Foo,
 where: f.bar >= ^bar,
 order_by: fragment("? + ?", f.cost1, f.cost2),
 limit: 1) |> Repo.one

关于elixir - 如何在Ecto中按两列的总和来排序查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39214047/

10-15 23:34