Запрос MySQL Laravel
не могу составить нужный мне запрос, не хватает мозгов.
Есть таблица Game в которой имеются следующие поля: id, user_id, dictionary_id, avg_speed, count_mistakes, percent_mistakes, created_at. Нужен запрос, который сгруппирует все строки по полю user_id и выведет поля user_id, max_speed (максимальная скорость), avg_speed (средняя), avg_mistakes (средний процент ошибок).
Функционал - таблица рекордов. Фильтры по дате: сегодня, неделя, все время. В зависимости от выбранной даты срабатывает условие when(). Результирующие поля avg_speed и avg_mistakes фильтровать по дате не нужно, то есть считать среднее из всех полей по этим колонкам.
Я собрал следующий запрос:
$records = Game::select('user_id',
DB::raw('MAX(avg_speed) as max_speed'),
DB::raw('AVG(avg_speed) as avg_speed'),
DB::raw('AVG(percent_mistakes) as avg_mistakes'))
->where('dictionary_id', $dictionary->id)
->when($request->sort == 'now', function ($query) {
$query->whereDate('created_at', Carbon::now());
})
->when($request->sort == 'week', function ($query) {
$query->whereDate('created_at', '<=', Carbon::now())
->whereDate('created_at', '>=', Carbon::now()->subDays(7));
})
->groupBy('user_id')
->orderBy('max_speed', 'DESC')
->paginate(30);
Проблема этого запроса в том, что поля avg_speed и avg_mistakes тоже сортируются по дате. Не понимаю как сделать по другому