在Postgres和外生使用片段GROUP_BY在一起吗?

问题描述 投票:1回答:1

我努力让这与Postgres的和外生的工作。下面的查询工作正常无GROUP_BY,但我需要组片段场,这似乎也无法看到。任何想法有什么错呢?

  def query_clicks do
    from(Click)
    |> select(
      [c],
      [
        fragment("date_trunc('hour',?) as hour", c.inserted_at), c.link_id]
      )
    |> group_by([c], c.hour)
    |> Repo.all
  end

结果:

iex(1)> recompile; Shortr.LinkContext.query_clicks
[debug] QUERY ERROR source="clicks" db=1.2ms queue=4.9ms
SELECT date_trunc('hour',c0."inserted_at") as hour, c0."link_id" FROM "clicks" AS c0 GROUP BY c0."hour" []
** (Postgrex.Error) ERROR 42703 (undefined_column) column c0.hour does not exist

    query: SELECT date_trunc('hour',c0."inserted_at") as hour, c0."link_id" FROM "clicks" AS c0 GROUP BY c0."hour"
    (ecto_sql) lib/ecto/adapters/sql.ex:604: Ecto.Adapters.SQL.raise_sql_call_error/1
    (ecto_sql) lib/ecto/adapters/sql.ex:537: Ecto.Adapters.SQL.execute/5
    (ecto) lib/ecto/repo/queryable.ex:147: Ecto.Repo.Queryable.execute/4
    (ecto) lib/ecto/repo/queryable.ex:18: Ecto.Repo.Queryable.all/3
iex(1)> 
elixir phoenix-framework ecto
1个回答
1
投票

在生成的SQL调用c0.hour而你别名列hour。它应该是

SELECT date_trunc('hour',c0."inserted_at") as hour, c0."link_id" FROM "clicks" AS c0 GROUP BY hour

在这种外生将成为

def query_clicks do
  from(Click)
  |> select(
    [c],
    [
      fragment("date_trunc('hour',?) as hour", c.inserted_at), c.link_id
    ]
  )
  |> group_by([c], fragment("hour"))
  |> Repo.all
end

另一个问题是link_id,SELECT子句中的任何字段必须出现在GROUP BY子句或者是一个汇集起来。您例如,还通过集团可能link_id

© www.soinside.com 2019 - 2024. All rights reserved.