首页 > 解决方案 > Laravel GroupBy 多列日期

问题描述

我的表中有这些字段,我想按所选年份和 type_id 的月份获取数据,然后对每个月的金额求和。

前任:selectYear = 2019

这是我的account_table

id | type_id | amount |  kind   | created_at
 1 |    2    |   200  | expense | 2019-01-15 10:14:31 
 2 |    2    |   400  | income  | 2019-01-15 10:14:31 
 3 |    2    |   300  | expense | 2018-01-15 10:14:31
 4 |    5    |   100  | expense | 2019-02-15 10:14:31 
 5 |    5    |   200  | income  | 2019-03-15 10:14:31 

这是我预期的输出。

如果种类是费用,金额是-,如果种类是收入,金额是+

前任。1 月份。

id 1 有 200 支出,id 2 有 400 收入

公式-200 + 400

 Jan | Feb | Mar | ... so on
 200 | 100 | 200 | ... so on

我希望我能很好地交付和解释,我卡在这个功能上,请我需要帮助,

更新。预期输出 在此处输入图像描述

提前致谢。

标签: laraveleloquent

解决方案


在您的帐户表上尝试以下查询:

Account::select(
  DB::raw('SUM(IF(kind = "expense", amount * -1, amount)) as sum'),
  DB::raw('YEAR(date) as year'),
  DB::raw('MONTH(date) as month'),
)
->where('type', $type)
->where(DB::raw('YEAR(date)'), $selectYear)
->groupBy(DB::raw('MONTH(date)'));

你会得到这样的数据:

[
  [ sum: 400, year: 2020, month: 7, ]
  [ sum: 500, year: 2020, month: 8, ]
  ...
]

推荐阅读