Laravel 是否可以在表中按(月)分组和求和(每列)
嗨 在上面的示例中,我想知道在Laravel中获得结果时是否可以按月分组并对每个列求和(表是动态的,因此没有模型,而且有些表没有列“type_a”或“type_zzz”等) 我希望从上表中得到如下信息:Laravel 是否可以在表中按(月)分组和求和(每列),laravel,eloquent,Laravel,Eloquent,嗨 在上面的示例中,我想知道在Laravel中获得结果时是否可以按月分组并对每个列求和(表是动态的,因此没有模型,而且有些表没有列“type_a”或“type_zzz”等) 我希望从上表中得到如下信息: +---------+--------+---------+---------+ | date | type_a | type_b | type_zzz| +---------+--------+---------+---------+ |01-01-18 | 12 | 10
+---------+--------+---------+---------+
| date | type_a | type_b | type_zzz|
+---------+--------+---------+---------+
|01-01-18 | 12 | 10 | 1 |
|02-01-18 | 2 | 5 | 1 |
|03-01-18 | 7 | 2 | 2 |
|01-02-18 | 13 | 6 | 55 |
|02-02-18 | 22 | 33 | 5 |
+---------+--------+---------+---------+
我使用以下代码按月对其进行分组,但我无法找到按每列返回总和的解决方案:
"01" =>
'type_a' : '21',
'type_b' : '17',
'type_zzz': '4'
"02" =>
'type_a' : '35',
'type_b' : '39',
'type_zzz': '60'
如果我正确理解您的问题,您可以使用SQL查询对值进行分组和求和:
$grouped=DB::table('table_name'))
->选择原始('
总和(类型a)为类型a,
总和(类型b)为类型b,
和(类型_z)为类型_z
')
->groupByRaw(‘月(日)’)
->get();
或者,如果不想在每个查询中指定列名,可以在集合中使用和:
$grouped=DB::table('table_name'))
->得到()
->分组依据(功能($item){
返回碳::解析($item->date)->格式('m');
})
->地图(功能组){
$group=$group->toArray();
$summated=[];
$columns=数组_键($group[0]);
数组移位($columns);
foreach($columns作为$column){
$summated[$column]=数组_和(数组_列($group,$column));
}
返回$summated;
});
日期是否实际采用数据库中的格式d-m-y
,还是实际采用正确的ISO格式y-m-d
?是否所有值都来自一年(2018年),或者将不同年份的月份分组是您想要的?您使用的是什么数据库管理系统?日期采用正确的ISO格式Y-m-d
,值将来自不同的年份。我正在使用mysql。谢谢到目前为止,您得到了什么?@moravac,因此,如果值来自不同年份,并且您按月份分组,那么根据您的描述,2017年9月和2018年9月的数据应该合并?我正在尝试第二种解决方案,但我得到以下错误:array\u keys()预期参数1为array,给定对象
@moravac-我已编辑了我的答案。不幸的是,我没有在任何地方安装Laravel来测试这一点,所以我是从内存中编写的。不走运,调用未定义的方法stdClass::keys()
好的,回到数组\u keys()
并将组
转换为一个数组。谢谢!小改动:代替:$summated[$column]=array\u column($group,$column)
需要:$summated[$column]=array\u sum(array\u column($group,$column))再次感谢您!
DB::table($id)->get()->groupBy(function($date) {
return Carbon::parse($date->repdate)->format('m');;
});