LIMIT
MurifoXの提案は、1行(合計)しかない最終結果セットにのみ適用されるため、機能しません。このスレッドを参照してください。
これを解決する最も簡単な方法は、データベースでカウントを行わないことです。
Model.where(:id => id).order('date DESC').limit(3).pluck(:column).compact.sum
これにより、の値がRubyにロードcolumn
され、そこで合計されます。さて、レコードのセットが本当に膨大な場合、これらの値がすべてアプリのメモリに読み込まれているという理由だけで、これは明らかに効率が低下します。
編集:追加.compact
-これにより、配列を合計する前に配列からnilsが削除されます(これによりエラーが発生します)。
SQLでこれを行うための推奨される方法は、次のようなサブクエリを使用することです。
SELECT SUM(subquery.column) FROM (
SELECT * FROM models WHERE id = 5 LIMIT 3
) AS subquery;
特定のモデルのテーブルから選択することを期待しているため、これをActiveRecordクエリに変換する簡単または簡単な方法はありません。