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 (将#修改为@)