我有一个产品表,我试图雄辩地进行查询,根据情况将结果分为五个子组。 每个子组将显示满足此条件的总行数。
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();