多级ActiveRecord查询

时间:2016-09-03 02:06:35

标签: ruby-on-rails ruby activerecord

假设我有一个包含架构的数据库:

A - String
B - String
C - Int
D - Int

数据库是

 A  |  B  | C | D 
------------------
'F' | 'a' | 1 | 2
'F' | 'a' | 1 | 4
'F' | 'b' | 2 | 4
'Z' | 'a' | 3 | 7
'Z' | 'b' | 4 | 3
'Z' | 'a' | 6 | 5

我想要的是

˚F

a 2 6
B'/强> 2 4

ž

a 9 12
B'/强> 4 3

基本上,按A分组,然后按B分组,SUM(C), SUM(D)分组。我怎么能在ActiveRecord中做到这一点?

1 个答案:

答案 0 :(得分:0)

以下是AR解决方案:

things = Thing.select('a, b, sum(c) as sum_c, sum(d) as sum_d').group(:a, :b)

things.each do |thing| 
  puts "#{thing.a} / #{thing.b} / #{thing.sum_c} / #{thing.sum_d}" 
end

# F / a / 2 / 6
# F / b / 2 / 4
# Z / a / 9 / 12
# Z / b / 4 / 3

您可以在AR类中动态创建属性(请参阅as sum_c)。根据您的操作,使用直接SQL可能会更容易/更好。