Elixir中的评估参数(与Ecto)

时间:2019-02-14 16:56:18

标签: elixir ecto

看看下面的select()行:

def query_group(user, group_by, filters \\[]) do
    from(Click)
    |> select([c], {c.^group_by, count(c)})
    |> where([c], c.link_user_id == ^user.id)
    |> where([c], ^filters)
    |> group_by([c], ^group_by)
    |> Repo.all
    |> Enum.map(&(Tuple.to_list &1))
  end

group_by是一个原子。例如,如果group_by = :platform,则在select字段中,我需要获取select([c], {c.platform, count(c)})

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您也可以像在field/2中那样使用select([c], {field(c, ^group_by), count(1)}) (不确定group_by是否需要固定在此处,但我认为是这样)

答案 1 :(得分:0)

您可以使用fragments,将选择位更改为

...
|> select(fragment("count(*), ?", ^group_by))

这样,您可以轻松使用功能的输入。