Как мне получить сумму онлайн-пользователей из последних 500 записей?

#mysql #laravel

#mysql #laravel

Вопрос:

У меня есть таблица в user_statistics. Время от времени в нем появляются новые записи. Я хочу получить сумму одного столбца из последних 500 записей. Как я могу этого добиться?

Я пробовал, но это не работает:

     UserStatistics::select(DB::raw('SUM(rooms_online) as rooms_online'))
        ->orderBy('id', 'desc')
        ->take(User::count())
        ->get();
 

SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1140 Смешивание ГРУППОВЫХ столбцов (MIN(), MAX(), COUNT(), …) без ГРУППОВЫХ столбцов является незаконным, если нет предложения GROUP BY (SQL: выберите SUM(rooms_online) как rooms_onlinefrom user_statistics order by id desc limit 1)

Когда я добавлю groupBy, я получу не сумму, а все записи по отдельности.

Могу ли я получить рекомендации о том, как это сделать?

Комментарии:

1. Я не laravel, но я бы попытался удалить take() и добавить limit(500)

2. К сожалению, это не помогло

3. как показывает ошибка, вы должны добавить groupBy()

4. Запустите SHOW CREATE TABLE user_statistics и вставьте результат в свой вопрос. Кроме того, опубликуйте иллюстрацию ожидаемого результата.

Ответ №1:

вы можете взять последние 500 строк:

 $rooms_online=DB::table('user_statistics')->latest()->take(500)->sum('rooms_online');
  
 

Ответ №2:

Если вы хотите запросить только сумму последних 500, вы можете попробовать приведенный ниже код.

 UserStatistic::orderBy('id', 'desc')->limit(500)->sum('rooms_online');