Maison  >  Questions et réponses  >  le corps du texte

Comment calculer la différence entre deux requêtes SQL

Je souhaite faire une soustraction entre entotalitem et exotalitem, la requête que j'utilise consiste à récupérer les données de la même table tbl_orders_data.

J'ai essayé de créer 2 requêtes, la première requête consiste à récupérer l'intégralité de l'élément et la deuxième requête consiste à récupérer l'exotalitem

$encheck  = DB::table('tbl_orders_data')
                ->select('slot_id', DB::raw('sum(total_item) as entotalitem'))
                ->where('id_order_data', 'like', 'PBM' . '%')
                ->groupBy('slot_id')
                ->pluck('entotalitem');

$excheck  = DB::table('tbl_orders_data')
                ->select('slot_id', DB::raw('sum(total_item) as extotalitem'))
                ->where('id_order_data', 'like', 'PBK' . '%')
                ->groupBy('slot_id')
                ->pluck('extotalitem');
$en = $encheck;
$ex = $excheck;
    
dd($en - $ex);

Dois-je utiliser une seule requête ? Ou dois-je faire 2 requêtes comme j'ai essayé ? S'il vous plaît, aidez-moi, merci

P粉036800074P粉036800074407 Il y a quelques jours595

répondre à tous(1)je répondrai

  • P粉515066518

    P粉5150665182023-09-08 09:38:50

    Vous pouvez utiliser l'agrégation conditionnelle ici :

    $check = DB::table('tbl_orders_data')
        ->select('slot_id', DB::raw("sum(case when id_order_data like 'PBM%' then total_item else 0 end) -
                                     sum(case when id_order_data like 'PBK%' then total_item else 0 end) as totalitem"))
        ->groupBy('slot_id')
        ->pluck('totalitem');
    

    répondre
    0
  • Annulerrépondre