module ActiveRecord::Calculations

def calculate(operation, column_name)

end
...
values.each do |family, max_age|

# => 43
puts values[drake]
values = Person.group(:family).maximum(:age) # Person belongs_to :family
drake = Family.find_by(last_name: 'Drake')

# => 43
puts values["Drake"]
values = Person.group('last_name').maximum(:age)

takes either a column name, or the name of a belongs_to association.
* Grouped values: This returns an ordered hash of the values and groups them. It

for AVG, and the given column's type for everything else.
* Single aggregate value: The single value is type cast to Integer for COUNT, Float

There are two basic forms of output:

Person.sum("2 * age")

Person.group(:last_name).having("min(age) > 17").minimum(:age)
# Selects the minimum age for any family without any minors

Person.average(:age) # SELECT AVG(age) FROM people...
Person.calculate(:count, :all) # The same as Person.count

#minimum, and #maximum have been added as shortcuts.
This calculates aggregate values in the given column. Methods for #count, #sum, #average,
def calculate(operation, column_name)
  if has_include?(column_name)
    relation = apply_join_dependency
    if operation.to_s.downcase == "count"
      unless distinct_value || distinct_select?(column_name || select_for_count)
        relation.distinct!
        relation.select_values = [ klass.primary_key || table[Arel.star] ]
      end
      # PostgreSQL: ORDER BY expressions must appear in SELECT list when using DISTINCT
      relation.order_values = [] if group_values.empty?
    end
    relation.calculate(operation, column_name)
  else
    perform_calculation(operation, column_name)
  end
end