我在mysql中有此表:
学生付款:id,student_class(varchar),student_code(varchar),性别(varchar),金额(float),created_at(时间戳)
型号名称是StudentPayment
我想要实现的是:
如果student_class是JSS1,它将检查每种性别的支付金额并将其放在相应的列中
如果student_class是JSS2,它将检查每个性别的支付金额并将其放在相应的列中
如果student_class是SSS1,它将检查每个人(包括男性和女性)支付的金额
如果student_class是SSS2,它将检查每个人(包括男性和女性)支付的金额
它对垂直和水平方向的所有内容进行求和
它按日期(created_at)将所有内容分组
我的 Controller 中有此查询,但不知道如何继续
$students = DB::table('student_payment')
->select(
'student_class',
'gender',
'amount',
DB::raw('DATE(created_at) as created_date')
)
->orderByRaw('created_at DESC');
我想要实现的结果如下所示:
如何在控制器中完成此查询以实现此结果。谢谢
答案 0 :(得分:0)
以下代码将为您分组学生付款数据,
$payments = DB::table('student_payment')->orderBy('created_at', 'DESC')->get();
$data = [];
foreach ($payments as $payment){
if($payment->gender=="male"){
$data[$payment->student_class]['male'][] = $payment->amount;
}elseif($payment->gender=="female"){
$data[$payment->student_class]['female'][] = $payment->amount;
}
}
现在,您可以使用array_sum函数计算金额的总和。例如,
如果您想计算JSS1级女学生的工资,
array_sum(data['JSS1']['female']);
这将给出付款金额。您也可以像这样计算其他值。