首页 > 解决方案 > 汇总同一日期的总数据并按日期分组

问题描述

我在下面有一个交易表

id | amount | created_at
1  |  300   | 2021-01-01
2  |  400   | 2021-01-01
3  |  150   | 2021-01-02
4  |  600   | 2021-01-03

如何合计同一日期的所有金额并按 created_at 分组显示?

到目前为止我已经尝试过了,但它似乎是错误的

$query->selectRaw('sum(amount) as amount, created_at')
            ->groupBy('created_at')
            ->get()
            ->map(function($item){
                return [
                    'date' => date('d M', strtotime($item->created_at)),
                    'total' => $item->amount
                ];
            });

标签: laraveleloquent

解决方案


如果该created_at字段是日期格式,您的代码将不会出现您在评论中描述的问题(重复结果)。我很确定该列不是真正的日期格式,而是日期时间。

您可以使用DATE(created_at)实际将其转换为日期格式:

$query->selectRaw('sum(amount) as amount, DATE(created_at) as date')
    ->groupBy('date')
    ->get()
    ->map(function ($item) {
        return [
            'date'  => date('d M', strtotime($item->date)),
            'total' => $item->amount,
        ];
    });

推荐阅读