Ruby on rails 使用rails中的连接进行分组

Ruby on rails 使用rails中的连接进行分组,ruby-on-rails,Ruby On Rails,我有两张桌子 table 1: has_many table2 table1 fields are id,name,amount, contract_id table 2: belongs to table1 table2 fields are id,name,table1_id 让我们举个例子 表1一条记录在表2中有3条记录 表1.其中(合同编号:2).表2.计数=3 Table1.where(contract_id: 2) = id:2, name: "abc", amount= 1

我有两张桌子

table 1: has_many table2
table1 fields are id,name,amount, contract_id

table 2: belongs to table1
table2 fields are id,name,table1_id
让我们举个例子 表1一条记录在表2中有3条记录 表1.其中(合同编号:2).表2.计数=3

  Table1.where(contract_id: 2) = id:2, name: "abc", amount= 100, contract_id: 2
  Table1.where(contract_id: 2).table2 = id:1, name: "abc1", table1_id: 2
                          id:2, name: "abc2", table1_id: 2
                          id:3, name: "abc3", table1_id: 2
当我尝试使用连接进行分组时,会产生问题

Table1.joins(:table2).where(contract_id: 2).group(:name).sum(:amount)
I want result here ["abc", 100]
But its give me ["abc", 300]

提前感谢

这是一种错误的方法:如果只想获取表\u id:2,请尝试此方法

Table1.joins(:table2).where(table2: {table1_id: 2}).group(:name).sum(:amount)

我在这里假设标准Rails约定是
Table1。table_name
table1s
(复数)。如果设置不同,则需要修改此答案

您正在通过
:name
分组。Rails假定您指的是
“table1s.name”
,因为这是生成查询的模型。您是否尝试按
表2.name
分组?如果是这样,您必须明确指定:

Table1.joins(:table2).where(id: 2).group("table2s.name").sum(:amount)

类似地,
其中(id:2)
指的是
表1
,但我认为在这种情况下,这就是你的意思,对吗?

我不清楚你为什么选择
组。您只是从
表1
中提取数据。所以这可以作为
Table1.join(:table2).where(id:2).uniq
@dkp实际上我正在处理报告,所以我在一个变量中获取过滤结果数据,并重用这个简单的第一个查询,我在多个表中使用join,但在某个阶段使用group by时,它会给我正确的结果在这种情况下,为什么使用
sum
?似乎您只是在查找表1中的实际值。amount
。若您只是选择了名称和金额,而不是求和和和分组,那个么这就是您想要的吗?@AndrewSchwartz我是从contract_id=2的表中找到的记录,所以这个查询有4条记录,当我使用group by with sum应用group by时,我会遇到一个问题,您在问题中并没有显示哪些记录具有contract_id 2。请回答您试图如何处理您的
总和
,以及您的
where(id:2)
在此语句中的功能等同于
where(表2:{table1_id:2})
应该足够了,因为
id
这里指的是
table1
上的一列,并且它已经在
table1.id=table2.table1\u id
上加入了。当您执行上述操作时,填充输出是什么?我没有创建表来测试这个示例。