【问题标题】:How to get the total amount in a database table field month wise of the current year using laravel如何使用 laravel 获取当前年份的数据库表字段中的总金额
【发布时间】:2026-01-01 10:15:02
【问题描述】:

所以我有一个带有数量和 created_at 字段的数据库,我想要当年和/或每年每月的总金额。

$sql = 'SELECT SUM(amount) as "Amount",MONTHNAME(created_at) as "Month"
FROM transactions WHERE YEAR(created_at) = YEAR(CURDATE())
GROUP BY YEAR(created_at),MONTH(created_at)';
DB::statement($sql);

实际表

ID    amount     created_at
1      1000      2019-10-24    
2      234       2019-11-11
3      122       2019-09-04
4      5200      2019-09-14

预期结果

ID    Amount     Month
1      6322      September    
2      234       November

语法错误或访问冲突:1055 db.table.created_at 不在 Group by(SQL: SELECT SUM(amount) as "Total Amount", MONTHNAME(created_at) as " Month

请问它在说什么。但是,如果在 phpmyadmin 上运行此查询,它工作得非常好

【问题讨论】:

标签: mysql sql laravel eloquent


【解决方案1】:

首先在app\config\database -> mysql中设置strict => false

之后运行php artisan optimize

然后

 $sql = DB::table('transactions')
        ->select(DB::raw('SUM(amount) as Amount,MONTHNAME(created_at) as Month Name'))
        ->where(DB::raw('YEAR(created_at) = YEAR(CURDATE())'))
        ->groupBy('created_at')
        ->get();

【讨论】:

  • 给出一个 sql 语法错误在 'group by created_at' 附近使用的语法错误
  • 我错了
【解决方案2】:

您正在对created_at 的部分进行分组,然后在您SELECT 时引用created_at 本身。问题是,当您在查询中对结果进行分组时,只能使用聚合函数和分组的事物。如果您在 select 中使用 MONTH(created_at) 而不是 MONTHNAME 应该没问题(或者您可以改为 group by YEAR, MONTHNAME 并继续在投影中使用 MONTHNAME

【讨论】: