微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ecto:按片段结果分组

如何解决Ecto:按片段结果分组

我正在尝试按规范化日期对记录进行分组。该查询sql 中有效,但我无法将其转换为 Ecto。到目前为止,我有

Invoice
|> where([i],i.club_id == ^id)
|> group_by(
  [i],fragment(
    "CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')
      ELSE to_char((? + interval '1' month),'YYYY-MM') END",i.date,i.date
  )
)
|> order_by(
  [i],desc:
    fragment(
      "CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')
    ELSE to_char((? + interval '1' month),i.date
    )
)
|> select([i],[
  sum(i.gross_amount),sum(i.amount_paid),count(i.payer_id)
])
|> Repo.paginate(params)

这给了我错误

expected at most one result but got 13 in query:
from i0 in kurabuApp.Admin.Invoices.Invoice,where: i0.club_id == ^"123",group_by: [fragment("CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM')\n          ELSE to_char((? + interval '1' month),i0.date,i0.date)],select: count("*")

我尝试的另一种方法是:

Invoice
|> where([i],i.club_id == ^id)
|> select([i],[
fragment(
  "CASE WHEN EXTRACT(DAY FROM ?) < 25 THEN to_char(?,'YYYY-MM') END AS grp_date",i.date
),sum(i.gross_amount),count(i.payer_id)
])
|> group_by([i],fragment("grp_date"))
|> order_by(desc: fragment("grp_date"))
|> Repo.paginate(params)

结果:

ERROR 42703 (undefined_column) column "grp_date" does not exist

工作的 sql 查询是:

select   
    CASE WHEN EXTRACT(DAY FROM date) < 25 THEN to_char(date,'YYYY-MM') 
        ELSE to_char((date + interval '1' month),'YYYY-MM') END
        AS grp_date,sum(gross_amount),sum(amount_paid),count(payer_id) 
from invoices 
where club_id = '123' 
group by grp_date 
order by grp_date desc;

这里出了什么问题。绑定不知何故似乎不起作用,我无权访问 grp_date

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。