0, у меня есть этот код, который отлично работает

$data = DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->select(DB::raw('count(*) as gold, cat_cliente'))->where('cat_cliente', '=','Gold')
   ->groupBy('cat_cliente')
   ->get();

Я хочу сделать еще один выбор, но с другим условием, я пытался с этим, но не работает

$data = DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->select(DB::raw('count(*) as gold, cat_cliente'))->where('cat_cliente', '=','Gold')
   ->select(DB::raw('count(*) as silver, cat_cliente'))->where('cat_cliente', '=','Silver')
   ->groupBy('cat_cliente')
   ->get();

Кто-нибудь может мне помочь?

1
Oscar 20 Дек 2019 в 17:49

1 ответ

Group By cat_cliente, это будет считать золото, считать серебро ... в каждой записи.

DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->select(DB::raw('count(incidencias.id) as count'), cat_cliente)
   ->whereIn('cat_cliente', ['Gold', 'Silver'])
   ->groupBy('cat_cliente')
   ->get();

выход =>

-----------------
 count | cat_cliente
------------------
   10  | Gold
------------------
    3  | Siliver
-----------------

Вы хотите поместить их в одну запись, я думаю, что вы можете вывести их и показать их по циклу. Однако, если вы действительно хотите получить его в запросе, попробуйте это:

$gold_query = DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->where('cat_cliente', 'Gold')
   ->selectRaw('COUNT(incidencias.id) AS gold', '0 AS silver');

$silver_query =  DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->where('cat_cliente', 'Silver')
   ->selectRaw('0 AS gold, count(incidencias.id) AS silver');

$gold_silver = $gold_query->unionAll($silver_query);

DB::table(DB::raw("({$gold_silver->toSql()}) AS gs"))
          ->mergeBindings($gold_silver)
          ->selectRaw('SUM(gold) AS gold, SUM(silver) AS silver')
          ->get()

Выход =>

----------------
 gold | silver | 
-----------------
   10  | 3    |
----------------
0
TsaiKoga 20 Дек 2019 в 15:59