MySQL / Ruby on Rails - كيفية "SUM" في A: HAS_MANY CASE
-
02-10-2019 - |
سؤال
لدي الجداول التالية:
المستخدم: مشتريات HAS_MANY
البند: مشتريات HAS_MANY
يحتوي العنصر على عمود "مبلغ" (يمكن أن يكون + أو -) وأحتاج إلى العثور على جميع المستخدمين الذين لديهم مبلغ إيجابي من "item.amounts" (على جميع عمليات الشراء التي قام بها كل واحد).
كيف يبدو هذا الاستعلام؟ (لست متأكدًا من كيفية التعامل مع "SUM" بشكل صحيح ، في هذه الحالة.)
لقد بدأت بما يلي ، لكن من الواضح أنه من الخطأ ... (لن يتضمن "عمليات الشراء" التي تحتوي على عنصر به عنصر سلبي. amount ...)
users = user.find (: الكل ،
: include => {: buyshes =>: item} ،
: SELECT => "sum (item.amount)" ،
: Order => "..." ،
: ظروف => "..." ،
: Group => "user.id" ،
: وجود => "sum (item.amount)> 0")
شكرا لمساعدتكم مع هذا!
توم
المحلول
جرب هذا:
User.all(:joins => items, :group => "users.id",
:having => "SUM(items.amount) > 0")
نصائح أخرى
يبدو أن هذه حالة جيدة لبعض أساليب النماذج.
لم أختبر هذا ولكن أعتقد أنك تريد أن تفعل شيئًا مشابهًا لما يلي:
class User < ActiveRecord::Base
has_many :purchases
has_many :items, :through => :purchases
def items_total
#get all the items iterate over them to get the amount,
#compact to get rid of nils
#and reduce with a sum function to total and return
items.all.each{|item| item.amount}.compact.reduce(:+)
end
ومن بعد
User.items_total