7 эффективных методов суммирования сгруппированных данных в Laravel

В Laravel группировка и суммирование данных — обычное требование при работе с базами данных. Если вам нужно рассчитать общий объем продаж по категориям или средние баллы на одного пользователя, Laravel предлагает несколько методов для эффективного достижения этой цели. В этой статье мы рассмотрим семь эффективных методов суммирования сгруппированных данных в Laravel, а также приведем примеры кода, демонстрирующие их использование.

Метод 1: использование построителя запросов с группировкой по и суммой

$results = DB::table('sales')
    ->select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category')
    ->get();

Метод 2: использование Eloquent ORM с группировкой по и суммой

$results = Sale::select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category')
    ->get();

Метод 3. Использование построителя запросов с предложением Have

$results = DB::table('sales')
    ->select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category')
    ->havingRaw('SUM(amount) > ?', [1000])
    ->get();

Метод 4: использование Eloquent ORM с предложением Have

$results = Sale::select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category')
    ->havingRaw('SUM(amount) > ?', [1000])
    ->get();

Метод 5. Использование построителя запросов с подзапросами

$subquery = DB::table('sales')
    ->select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category');
$results = DB::table(DB::raw("({$subquery->toSql()}) as sub"))
    ->mergeBindings($subquery)
    ->select('category', 'total_sales')
    ->get();

Метод 6: использование Eloquent ORM с подзапросами

$subquery = Sale::select('category', DB::raw('SUM(amount) as total_sales'))
    ->groupBy('category');
$results = Sale::query()
    ->fromSub($subquery, 'sub')
    ->select('category', 'total_sales')
    ->get();

Метод 7. Использование необработанных SQL-запросов

$results = DB::select('SELECT category, SUM(amount) as total_sales FROM sales GROUP BY category');

Суммирование сгруппированных данных в Laravel можно выполнить различными методами в зависимости от ваших конкретных требований. Независимо от того, предпочитаете ли вы использовать Query Builder, Eloquent ORM или необработанные SQL-запросы, Laravel предлагает гибкость и удобство для задач агрегирования данных. Используя эти методы, вы можете эффективно рассчитывать суммы, применять условия и получать значимую информацию на основе сгруппированных данных.