:(ポイント)ティンので、合計その後、
Game.limit(10).SUMを十分であろう以下答えます。
sum
の機能は実際には1つの引数しか取らず、AR 4.xは余分な引数を無視するのに対して、新しいAR 5.0.0ではエラーが発生します。元の試みはまったく素朴でした。
は@pitabas'の提案に続いて、私は、試してみました:あなたはARによって構築SQLから伝えることができるように、これはどちらか動作しません
Game.order('points desc').limit(20).sum(:points)
SELECT SUM("games"."points") FROM "games" LIMIT ? [["LIMIT", 20]]
、LIMIT
句は、クエリの結果に作用するため、これは単一の値です。さらに、ORDER
句は完全に無視されます。上記の式の結果は、すべてのレコードのpoints列の合計です。私はそれに着い最も近いが、次のされ
SELECT SUM(points) FROM (SELECT points FROM games ORDER BY points DESC LIMIT 20)
:
実際に動作するSQLクエリのようなものである
sq = Game.order('points desc').limit(20)
Game.from(sq).sum('"points"')
得られます
SELECT SUM("points") FROM (SELECT "games".* FROM "games" ORDER BY points desc LIMIT ?) subquery [["LIMIT", 20]]
ハック: points
の周りの二重引用符に注意してください。それで私はsum
引数の文字通りの解釈を強制することができました。それらがなければ、クエリは「そのような列はありません」エラーを発生させます。
私は昨日同じ質問について尋ねましたhttp://stackoverflow.com/questions/43955310/rails-sum-on-associationrelation-attribute-is-incorrect-if-association-has-limit。 'from'の試行さえも、少なくとも関係やPGでは、レール5で動作していません。答えはないと思うが、単に 'relation.pluck(attr).sum'を使う。 – appleII717