我是Laravel的初学者,所以如果我的问题很简单,我会提前道歉。我有一个具有3列(ID,V,结果)的表(table1),如下所示:
ID---------v---------result
1----------123---------True
1----------123---------True
1----------123---------false
2----------123---------false
2----------123---------True
2----------123---------error
我想计算每个ID有多少个假和真。就像table2:
ID--------numOfT---------numOfF--------other
1----------2---------------1------------0
2----------1---------------1------------1
我认为我应该使用 group by , count 和 where ,如下所示:
$ table2 = DB :: table('table1')
-> groupBy('ID')->
-> count();
但我不知道确切的查询。
知道如何获得table2吗?
答案 0 :(得分:0)
这是一个使用条件聚合满足您要求的原始MySQL查询:
SELECT
ID,
COUNT(CASE WHEN result = 'True' THEN 1 END) AS numOfT,
COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF,
COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other
FROM table1
GROUP BY
ID;
相应的Laravel代码可能如下所示:
$result = DB::table('table1')
->select('ID',
DB::raw('COUNT(CASE WHEN result = 'True' THEN 1 END) AS numOfT'),
DB::raw('COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF'),
DB::raw('COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other'))
->groupBy('ID')
->get();