#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');