我有一张桌子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_ptotal_a计算。

例如:studid = 30total_p = 5total_a = 2

因此,我想获取每个studid的每个月的总计,以及总计月份的total_ptotal_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

最佳答案

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。

关于php - 如何在Laravel中使用sum(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32094612/

10-12 05:51