Вы должны исправить ваши модели в первую очередь. У вас есть Стоимость, относящаяся как к Списку, так и к Пищу, но нет ни одного внешнего ключа ни для одной из ваших миграций. В общем случае, если модель A: принадлежит_ модели B, для таблицы модели A в качестве внешнего ключа требуется b_id.
Как только вы исправите это, так как вы хотите агрегировать, вам нужно будет построить запрос на основе модели, которая имеет значение для агрегирования - в данном случае, Cost. Вы хотите ограничить это, чтобы включить только те затраты, связанные с едой с определенным атрибутом - поэтому используйте цепочку методов, как это (при условии, что вы используете Rails 3):
# average cost of all fruit
Cost.includes(:food).where('foods.type = ?', 'fruit').average(:amount)
Ограничить это по году и кварталу становится немного сложнее, но работает в том же духе, но чтобы дать вам твердый совет по этому поводу, вам нужно сначала починить свои модели. Я рекомендую прочитать эти два руководства:
EDIT
После редактирования попробуйте это (не проверено):
Cost.includes(:food, :list).where('foods.type = ? AND lists.year = ? AND lists.quarter = ?', 'fruit', 2011, 1).average(:amount)