Ecto查询在datetime字段上执行group_by MONTH并返回元组列表

时间:2017-04-24 15:21:41

标签: elixir phoenix-framework ecto

作为this question的标记问题:

如何更改查询以返回包含月份整数和分组计数的元组列表?所以你的结果看起来像是:

[{1, 2}, {2, 2}, {3, 2}, {4,2}]

5 个答案:

答案 0 :(得分:3)

只是从问题的评论中移植它。

query 
|> group_by([e], fragment("date_part('month', ?)", e.inserted_at)) 
|> select([e], {fragment("date_part('month', ?)", e.inserted_at), count(e.id)}) 
|> Repo.all

答案 1 :(得分:1)

找到答案:

query 
|> group_by([e], fragment("date_part('month', ?)", e.inserted_at)) 
|> select([e], {fragment("date_part('month', ?)", e.inserted_at), count(e.id)}) 
|> Repo.all

答案 2 :(得分:0)

也许更清楚一点。

query = from u in User,
  group_by: fragment("date_part('month', ?)", u.inserted_at),
  select:   {fragment("date_part('month', ?)", u.inserted_at), count(u.id)}
Repo.all(query)

答案 3 :(得分:0)

您也可以这样命名片段。

User
|> group_by(fragment("month"))
|> select([u], {fragment("date_part('month', ?) as month", u.inserted_at), count(u.id)})
|> Repo.all()

答案 4 :(得分:0)

我正在使用它,因为我正在获取浮点数返回值(例如6.0而不是6)

User
|> group_by(fragment("month"))
|> select([u], {fragment("date_part('month', ?)::int as month", u.inserted_at), count(u.id)})
|> Repo.all()