0

そのタイトルはあまり説明的ではありませんでした。質問を短くする方法がわかりませんでした...

、、、およびasフィールドのテーブルがあるweightliftersとします。このテーブルには、何百ものエントリが含まれています。テーブルで合計ポンドが最も高い10人を取得したいと思います。私は次のように書いています:namepoundstype_of_lift

Weightlifter.order("pounds DESC").limit(10)

累積ウェイトが必要な場合を除いて、これは正常に機能します。したがって、ある人が2回以上トップ10に入っている場合は、その人の名前を2回リストしたくないので、重みを合計して合計として表示します。だから私が持っている場合:

"Johnny", "300", "Bench"
"Wesley", "295", "Bench"
"Johnny", "280", "Clean"
...
"Timmy", "150", "Curl"

300ポンドのジョニーの代わりに580ポンドのジョニーを表示し、後で280ポンドのジョニーとして表示したいと思います。

これはどのように行われますか?

Ruby 1.9.3、Rails 3.2.6、SQLite3 3.6.20

ありがとう!

4

2 に答える 2

2

それはこのようなものでなければなりません

Weightlifter.select('name, type_of_lift, sum(pounds) as pounds').
             group('name').
             order("sum(pounds) DESC").
             limit(10)

ここに良いガイドがあります: ActiveRecord Query Interface

于 2012-07-27T23:36:16.510 に答える
1
# in your WeightLifter model
class Weightlifter < ActiveRecord

  attr_accessor :weight_total


# WeightLifterController

lifters = []

Weightlifter.order("pounds DESC").each do |lifter| 

  return lifters if lifters.count == 10

  if !lifters.collect{|a| a[:name] }.include?(lifter.name)
    lifters << lifter
    local_lifter = lifters.where(name: lifter.name).first
    local_lifter.weight_total = lifter.weight
  else
    local_lifter = lifters.where(name: lifter.name).first
    local_lifter.weight_total = local_lifter.weight_total + lifter.weight
  end

end
于 2012-07-27T23:51:38.270 に答える