У меня есть две таблицы проблем: users и race_weeks. Пользователь имеет много race_weeks, и race_week принадлежит пользователю. Следовательно, user_id - это fk в таблице race_weeks.
Мне нужно выполнить сложную математику для полей в таблице race_weeks, чтобы вернуть пользователям наибольшее количество очков за все время.
Вот поля, которыми мы должны манипулировать в таблице race_weeks.
races_won (int)
races_lost (int)
races_tied (int)
points_won (int, pos or neg)
recordable_type(varchar, Robots can race, but we're only concerned about type 'User')
Чтобы вы полностью понимали бизнес-логику на работе, в течение недели пользователь может участвовать во многих гонках. Запись race_week представляет итоговые результаты гонок пользователя за эту неделю. Пользователь считается активным в течение недели, если races_won, races_lost или races_tied больше 0. В противном случае пользователь неактивен.
Итак, вот что нам нужно сделать в нашем запросе, чтобы вернуть пользователей с наибольшим количеством выигранных баллов (фактически net_points_won):
Рассчитать net_points_won каждого пользователя (не поле в БД).
Для расчета net_points_won вы берете (1000 * count_of_active_weeks) - сумму (points__won). (Почему 1000? Просто представьте, что каждую неделю пользователь получает 1000 баллов за участие в соревнованиях и участвует в гонках. Мы хотим вычленить то, что мы увидим, потому что пользователь может участвовать только в одной гонке в неделю за 100 баллов и быть сидя на 900, который мы бы исказили, кто на самом деле заработал наибольшее количество очков.)
Это немного запутанно, поэтому дайте мне знать, если я смогу уточнить.