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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ecto查询在datetime字段上执行group_by MONTH并返回元组列表相关的知识,希望对你有一定的参考价值。

作为this question的标记问题:

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

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

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

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
另一答案

找到答案:

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
另一答案

也许更清楚一些。

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)
另一答案

您也可以像这样命名片段。

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

我正在使用它,因为我得到浮点返回值(比如.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()

以上是关于Ecto查询在datetime字段上执行group_by MONTH并返回元组列表的主要内容,如果未能解决你的问题,请参考以下文章

sqlAlchemy 按DateTime字段的年或月进行group_by查询

使用动态运算符创建 Ecto 查询

在 group by 中使用 datetime 日期并在单个 SELECT 中使用 order by 与使用子查询

mysql 可以group by 两个字段吗

Ecto - 如何通过特定查询获取“has_many”

如何使用 Ecto 加入多个存储库?