以下の処理をrubyで行いたいのですが、やり方がわからず困っています。

複数の[]から{}を取り出し、ひとつの[]に格納する。ただし、同じidをもつ{}numを合計して一つにまとめる。

data1 = [{
  'id' => 1,
  'num' => 1
},{
  'id' => 2,
  'num' => 3
},{
  'id' => 3,
  'num' => 5
}]

data2 = [{
  'id' => 1,
  'num' => 2
},{
  'id' => 3,
  'num' => 4
}]

data3 = [{
  'id' => 1,
  'num' => 2
},{
  'id' => 4,
  'num' => 4
}]

[{
  'id' => 1,
  'num' => 5
},{
  'id' => 2,
  'num' => 3
},{
  'id' => 3,
  'num' => 9
},{
  'id' => 4,
  'num' => 4
}]