Laravel9:如何按年月分组WhereBetween查询并统计金额
解决按年月分组并设置「月份-年份」格式键的问题
要实现按年月分组统计消费总额,同时把数组键改成月份-年份格式,你需要调整查询中的字段选择和分组逻辑,具体修改如下:
修改后的查询代码
$thisyearcolete = colete::query() ->whereBetween('created_at', ['2022-10-10', '2022-11-11']) ->selectRaw("DATE_FORMAT(created_at, '%m-%Y') as year_month") // 格式化日期为MM-YYYY格式 ->selectRaw('SUM(totaleuro) as totaleuro') ->groupBy('year_month') // 按年月组合字段分组 ->orderBy('year_month') ->pluck('totaleuro', 'year_month') // 用格式化后的年月作为数组键 ->toArray();
关键修改说明
- 用
DATE_FORMAT(created_at, '%m-%Y')将日期直接格式化为MM-YYYY(如11-2022),替代原来单独提取月份的逻辑,这样能同时包含年份信息,避免不同年份的同月份数据被合并。 - 分组依据从
month改为year_month,确保统计维度是「年月」而非单纯的「月份」。 pluck方法指定用year_month作为数组的键,最终输出的数组就会符合你要的格式。
执行后预期结果
^ array:2 [▼ "10-2022" => "250.00" "11-2022" => "450.00" ]
如果你的数据库不支持DATE_FORMAT函数(比如SQL Server),可以改用拼接方式:CONCAT(MONTH(created_at), '-', YEAR(created_at)) as year_month
内容的提问来源于stack exchange,提问作者ballan catalin
相关产品推荐
相关产品推荐

