如何解决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
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 举报,一经查实,本站将立刻删除。