Суммировать максимальные значения группы по

#php #mysql #laravel #eloquent

#php #mysql #laravel #красноречивый

Вопрос:

У меня есть этот запрос, который выдает следующий результат

 $result = DB::table('contagenshora')
            ->select(DB::raw('post_id as post_id'), DB::raw('product_id'), DB::raw('max(val) as maxHour'), DB::raw('hour'))
            ->whereBetween('date', array($dt->toDateTimeString(), $dt2->toDateTimeString()))
            ->where('hour', '=', $actHour->hour)
            ->groupBy(DB::raw('post_id'), DB::raw('product_id'))
            ->get();
  

Результат: Array ( [0] => stdClass Object ( [post_id] => 1 [product_id] => 1 [maxHour] => 4 ) [1] => stdClass Object ( [post_id] => 1 [product_id] => 2 [maxHour] => 3 ) [2] => stdClass Object ( [post_id] => 4 [product_id] => 0 [maxHour] => 6 ) ) )

Теперь мне нужна сумма «maxHour», но сгруппированная по «post_id», мне нужно что-то вроде этого:

(Например, для post_id = 1 мне нужна сумма 4 3)

Результат: Array ( [0] => stdClass Object ( [post_id] => 1 [maxHour] => 7 ) [1] => stdClass Object ( [post_id] => 4 [maxHour] => 6 ) ) )

Как я могу это сделать?

Ответ №1:

Просто удалите product_id group by предложение from и select затем. Также нет необходимости использовать DB::raw() для прямого выбора столбцов.

 $result = DB::table('contagenshora')
            ->select('post_id', DB::raw('max(val) as maxHour'))
            ->whereBetween('date', array($dt->toDateTimeString(), $dt2->toDateTimeString()))
            ->where('hour', $actHour->hour)
            ->groupBy('post_id')
            ->get();
  

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

1. А если мне тоже нужно группировать по часам? Итак, у меня есть maxHour для каждого сообщения и каждого часа. И я хочу суммировать все часы группы по почте. Можете ли вы мне помочь?

2. Вы переходите hour к предложению where . Итак, для этой конкретной записи будут показаны результаты. Кстати, сначала попробуйте свои собственные.