laravel - 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
我希望我能很好地交付和解释,我卡在这个功能上,请我需要帮助,
提前致谢。
解决方案
在您的帐户表上尝试以下查询:
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, ]
...
]
推荐阅读
- qemu - 如何在 arm64 / aarch64 上将 QEMU 来宾的退出代码传达给主机(相当于 isa-debug-exit)
- .net-core - .net core 2.1 lambda 使用自定义根 CA
- c++ - 当命名空间和命名空间中的枚举共享名称时,为什么 C++ typedef 会抛出错误?
- antlr4 - ANTLR4 c++ target getLine()/getCharPositioninLine() in visitor
- c++ - 使用概念启用类模板的成员函数
- excel - 使用逗号分隔的字符串作为参数的 SUMIFS
- kendo-grid - Angular Grid Detail 的 Kendo UI 展开/折叠按钮要向右移动?
- xml - 值列表的 xslt 转换
- node.js - nodemon npm 顺序启动脚本
- python - 如何为不同的蜘蛛设置相同的缓存文件夹,现在scrapy在缓存目录中为每个蜘蛛创建子文件夹