2015-02-25 3 views
-1

У меня есть база данных «ITEMS»; ITEM_ID, OWNER_ID и VALUE.ActiveRecord - получение суммы баллов пользователя

Владелец может владеть неограниченными товарами. У предмета может быть только один владелец.

И у меня есть база данных «OWNER»; ID, NAME

Я хочу найти НАЗВАНИЯ 10 лучших RICHEST (более богатых) людей. Как я могу это сделать?

Во-первых, мне нужно суммировать значения owner_id; чем сравнивать это с другими?

+0

Ваше имя базы данных? –

+0

my db name is "items" – cibinlik

+0

Вы используете MySql/Postgresql? –

ответ

-1

Это своего рода долго решение, но он работал на меня:

toplist = [] 
    all_owners = Owner.all 
    all_owners.each do |owner| 
     name = Owner.find(owner).name 
     owner_value = Item.where(owner_id: owner).sum(:value) 
     toplist << [owner_value,name] 
    end 
    @top10 = toplist.sort.last(10).reverse 
+0

Кому решительный ответ НЕ полезен: это точный ответ на мой вопрос, и вы Расскажите, пожалуйста, ваш идеальный ответ. – cibinlik

0

Вот что вы можете сделать:

Item.group(:owner_id) # grouping Items by owner id 
    .select("SUM(value) as sum") # summing values of each group 
    .order("sum DESC") # ordering resulting records by the sum value 
    .limit(10) # giving the top 10 records 
+0

Я получаю только нуль с этим запросом. – cibinlik

+0

Нет .. Вам нужно пройти итерацию .., чтобы получить оригинальные материалы. –

+0

см. это http://stackoverflow.com/questions/ 28683033/activerecord-sum-max-joins-results-in-array-with-multiple-nil-ids/28683157? Noredirect = 1 # comment45754852_28683157 –