У меня есть таблица продуктов, и я пытаюсь сделать запрос с eloquent, в котором я группирую результаты в пять подгрупп в зависимости от условий.В каждой подгруппе будет показано общее количество строк, удовлетворяющих этому условию.
DB::table(Product::TABLE_NAME)->select(
DB::raw("prize"),
DB::raw("count(*) as total")
)
->groupBy('prize')->get();
Я не знаю, куда помещены условия.
Я ожидаю этого вывода:
id_group | total |
------------------
1 | 34 |
2 | 46 |
3 | 126 |
id_group представляет каждое условие:
1 - prize = null
2 - prize = 0
3 - prize > 0
Решение : Я получил это, но я не знаю, является ли более эффективный способ или существует другоеспособ сделать это:
DB::table(Product::TABLE_NAME)->select(
DB::raw("SUM(CASE
WHEN prize IS NULL THEN 1 ELSE 0 END) AS 1"),
DB::raw("SUM(CASE
WHEN prize = 0 THEN 1 ELSE 0 END) AS 2"),
DB::raw("SUM(CASE
WHEN prize > 0 THEN 1 ELSE 0 END) AS 3")
)->get();