1

WalkathonRailsアプリを作成しています。各ウォーカーは、ラップごとに最大額までお金を約束する人々によって後援されています。

sponsorships列、、、walker_idおよびamount_per_lapを含むというテーブルがありますmax_amount。ウォーカーがどれだけのお金を集めたかを判断するためのSQLクエリを作成したいと思います。

、、、および列walkersを持つテーブルもあります。idnamelaps

これが有効なSQLではないことはわかっていますが、このようなものが欲しかったのですが、それを行うための最良の方法がわかりません。クエリを実行する前に、walker_idとlapsを指定できます。

SELECT SUM(MIN(ラップ*スポンサーシップ.amount_per_lap、スポンサーシップ.max_amount))FROMスポンサーシップここでsponsorships.walker_id = 1;

私はこれをレールで作っているので、アレルでこのようなことをする方法を見つけようとしていましたが、それを理解することができませんでした。

どんな助けでも大歓迎です。

編集:テーブルを明確にしwalkersます。

Edit2:疑似コードで誤ってminではなくmaxが使用されていました

4

2 に答える 2

2

あなたが探しているSQLはこれだと思います:

select w.id, w.name, sum(least(w.laps * s.amount_per_lap, s.max_amount))
from walkers w
join sponsorships s on w.id = s.walker_id
group by w.id, w.name

このleast関数は、「以下max_amount」の条件を適用するものです。これをARに変換することは、何を選択するかがわかったので、簡単なことです。私はこのようなことをするためにSQLに直接行く傾向があります。

于 2012-11-13T02:57:25.107 に答える
1

私は次のようなことを試みます:

class Sponsorship < ActiveRecord::Base
  name
  walker_id
  amount_per_lap
  max_amount

class Walker < ActiveRecord::Base
  name
  number_of_laps

walker_sum = 0
walker=walker.find(1) # For 1 walker.
walker.sponsorships.each do |sponsor| #
  walker_sum+= 
  min((sponsor.amount_per_lap * walker.number_of_laps), (sponsor.max_amount))
end
于 2012-11-13T01:38:48.300 に答える