chelkaz
@chelkaz

MySql Возможно одним запросом получить SUM() для нескольких полей?

Мне нужна не общее для двух полей, а разный результат для двух полей!
Сейчас могу только так: Сначала вытаскиваю все связанные по полю point так как оно определяет принадлежность к карточке продукта, а потом c полученным object работаю...

В примере запросы через класс фреймворка, но если знаете как через SQL запрос сделать, то напишите.
$ratings = DB::table('ratings')->where('point', 'test');
// Выбираю одно
$avg_ecology = $ratings->sum('ecology');
// Потом другое
$avg_social_protection = $ratings->sum('social_protection');


А нельзя запрос сделать, что бы он массив вернул? Например:
DB::table('ratings')->where('point', 'test')->sum('ecology')->sum('social_protection');
  • Вопрос задан
  • 599 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pantagruel964
$ratings = DB::table('ratings')
                 ->selectSub(function ($query) {
                     return $query->selectRaw('SUM(ecology)');
                 }, 'ecology')
                 ->selectSub(function ($query) {
                     return $query->selectRaw('SUM(social_protection)');
                 }, 'social_protection')
                 ->where('point', 'test')
                 ->get();
Ответ написан
UksusoFF
@UksusoFF
Можно попробовать поиграться с DB::raw()
->select(DB::raw('SUM(ecology) as ecology_sum'), DB::raw('SUM(social_protection) as social_protection_sum'))


И таки вы похоже работаете с коллекциями, а не MySQL.
https://laravel.com/docs/5.4/collections#method-sum
https://laravel.com/docs/5.4/queries

А если вам нужно посчитать количество связанных моделей, то нужно использовать https://laravel.com/docs/5.4/eloquent-relationship...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы