存储要在order_by中使用的计算列并选择

时间:2019-06-13 06:34:02

标签: elixir ecto

所以我正在计算PostGis。我有一个用户和一个地方模型。每个都有一个:geom,而Place有一个虚拟的distance字段。我想按距离排序,然后选择它。我有这样的工作,但我担心它两次执行了postgis calc。有更好的方法吗?

from(
  ...,
  order_by: [asc: st_distance(u.geom, p.geom)], 
  select: %{p | distance: st_distance(u.geom, p.geom)}
)

1 个答案:

答案 0 :(得分:2)

您可以使用别名来重用该计算所得的值,尽管您必须使用片段。这不是一个权衡! This article很好地详细说明了逻辑。

在您的用例中,它会给出如下信息:

from(
  ...,
  order_by: [asc: fragment("distance")], 
  select: %{p | distance: fragment("? AS distance", st_distance(u.geom, p.geom))}
)
相关问题