Fianite Fianite - 1 year ago 87
MySQL Question

Order records based on calculation

I'm currently finding the players with the most goals like such:

Player.joins(:player_stats).group('').order('SUM(player_stats.goals) DESC')

However now I want to order by goals per game, which is the sum of all their goals (player_stats.goals) divided by the number of games they have played (players_stats.length). Is it possible to do arithmetic like this when sorting using order()?

NOTE: I'm working on a mySQL database.

Answer Source

I think something along these lines would do:

      .order('(SUM(p‌​layer_stats.goals) / COUNT(player_stats.player_id)) DESC')
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download