У меня есть следующие таблицы:
competitions (id, ...)
questions (id, ...)
teams (id, ...)
team_user (id, user_id, team_id, ...)
answer_user (user_id, competition_id, question_id, points, ...)
Я пытаюсь составить запрос, чтобы вывести список всех команд, которые участвовали в соревновании, id = 20, учитывая, что мы сортируем список на основе накопления командбаллы пользователей.Однако иногда 2 команды получают одинаковое общее количество очков, поэтому нам нужно показать команду, которая смогла набрать это количество очков первым в списке, прежде чем другие (на основе ответов в колонке creation_at)
Я могучтобы получить этот список, используя следующий запрос, но не в состоянии сортировать по столбцу answer_user create_at:
$ranks = Team::withCount(['answers' => function ($q) use ($competition_id) {
$q->where('competition_id', $competition_id)
->select(DB::raw('sum(points)'));
}])
->where('competition_id', $competition_id)
->orderBy('answers_count', 'desc')
->get();
Редактировать 1 Я могу добиться требуемой сортировки после замены
->select(DB::raw('sum(points)')
с
->select(DB::raw('max(answer_user.created_at)')
Однако я хочу, чтобы на самом деле работали обе агрегации.По сути, находя общее количество очков, набранных каждой командой, затем сортируйте их по времени, сначала набирается одно шоу первым.