在Laravel中使用group by和count以及where一起查询

时间:2018-10-24 13:00:16

标签: sql laravel

我是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吗?

1 个答案:

答案 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();