如何对 AREL 中的分组列求和

发布于 2024-11-06 19:48:13 字数 385 浏览 0 评论 0原文

在 Rails 3/AREL

Model.group(:label).sum(:value)

SELECT sum(value), label from model_table group by label

中我会尝试找到 AREL 的做法

SELECT sum(value) from (select value, label from model_table group by label)

,即 Model.group(:label)。 map(&:value).sum 使用 ruby​​ 求和,如何在 SQL/AREL 中执行此操作

in Rails 3/AREL

Model.group(:label).sum(:value) will do

SELECT sum(value), label from model_table group by label

I am trying to find the AREL way of doing

SELECT sum(value) from (select value, label from model_table group by label)

which is Model.group(:label).map(&:value).sum using ruby to sum, how do I do this in SQL/AREL

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若无相欠,怎会相见 2024-11-13 19:48:13

不确定这是否有意义。您的核心 SQL 无效:

SELECT value, label FROM model_table GROUP BY label

您的选择中不能有没有聚合函数(例如 SUM)的 GROUP BY。我想你真正想要的是:

SELECT label, SUM(value) from model_table GROUP BY label

我对吗?要在 AREL 中执行此操作,请尝试以下操作:

relation = Model.select(:label).
  select(Model.arel_table[:value].sum.as("value_sum")).
  group(:label)
relation.to_sql
# => SELECT label, SUM("model_table"."impressions") AS value_sum FROM "model_table" GROUP BY label 

Not sure this makes sense. Your core SQL is not valid:

SELECT value, label FROM model_table GROUP BY label

You cannot have a GROUP BY without an aggregation function (e.g. SUM) in your select. I think what you actually want is this:

SELECT label, SUM(value) from model_table GROUP BY label

Am I right? To do this in AREL, try this:

relation = Model.select(:label).
  select(Model.arel_table[:value].sum.as("value_sum")).
  group(:label)
relation.to_sql
# => SELECT label, SUM("model_table"."impressions") AS value_sum FROM "model_table" GROUP BY label 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文