我有一张表total_count
id studid month year acls_id total_p total_a
1 30 08 2015 12 5 2
2 35 08 2015 12 5 2
3 52 08 2015 12 5 2
4 53 08 2015 12 5 2
5 54 08 2015 12 5 2
6 55 08 2015 12 5 2
7 30 09 2015 12 3 0
8 35 09 2015 12 3 0
9 52 09 2015 12 2 1
10 53 09 2015 12 3 0
11 54 09 2015 12 3 0
12 55 09 2015 12 3 0
我想计算每个学生total_p
和total_a
。
例如:studid = 30
,total_p = 5
和total_a = 2
。
因此,我希望获得每个月studid
的总和以及total_p
和total_a
的总和。
我的控制器代码是
$total_counts = DB::table('total_count')
->whereBetween('smonth',08, 09))
->whereBetween('syear', 2015, 2015))
->sum('total_p);
->sum('total_a);
查看blade.php
{{$total_counts->total_p}}
{{$total_counts->total_a}}
但它不起作用..
如何在查询构建器格式中使用sum()
?
我想输出如下:
studid total_p total_a
30 8 2
35 8 2
52 7 3
53 8 2
54 8 2
55 8 2
答案 0 :(得分:1)
Eloquent的聚合函数 sum()为所有匹配criterai的行返回单个标量。如果要获取行列表,则需要构建一个查询,按照ID对学生进行分组,并计算每个行的总和。
此查询应该可以解决问题:
$total_counts = DB::table('total_count')
->whereBetween('smonth',08, 09))
->whereBetween('syear', 2015, 2015))
->groupBy('studid')
->get(['studid', DB::raw('SUM(total_a) AS sum_a'), DB::raw('SUM(total_p) AS sum_p')]);
$ total_counts 中的每一行都包含3个值: studid , sum_a 和 sum_p 。