首页 文章

在laravel中使用groupBy()函数求和

提问于
浏览
0

表格,其中X,Y和Z具有一些单独的金额 .

样本数据:

Name | Amount |  Date
—————|————————|—————————
  X  |    100 | 15-11-17
  Y  |     50 | 15-11-17
  X  |     50 | 15-11-17
  Z  |     70 | 15-11-17
  Z  |     30 | 15-11-17

现在我想显示一个表格,其中X将返回一行,其中两行的总和在同一天 .

预期结果:

Name | Amount |  Date
—————|————————|—————————
  X  |    150 | 15-11-17
  Y  |     50 | 15-11-17
  Z  |    100 | 15-11-17

那么laravel查询是什么?我使用groupBy() . 但无法获得目标结果 .

这是我的laravel查询代码

$data = DB::table('transactions')                
            ->select('transactions.*')
            ->groupBy('transactions.title_id')
            ->whereDate('transactions.created_at', '=', $date)
            ->get();

并持续得到这个错误

"SQLSTATE[42000]: Syntax error or access violation: 1055 'finance_report.transactions.id' isn't in GROUP BY

有人请帮忙

2 回答

  • 0

    假设您的表名是 transactions ,以及示例表中的列和数据 - SQL查询将是

    SELECT Name, SUM(Amount) as Amount, Date
    FROM transactions
    GROUP BY Name, Date
    

    在laravel中你会把它写成

    $data = DB::table('transactions')                
        ->select('Name', DB::raw('SUM(Amount) as Amount'), 'Date')
        ->groupBy('Name', 'Date')
        ->get();
    

    您可以添加WHERE条件以及查询所需的内容 . 但是,如果您需要从表中选择更多列,则还需要将它们添加到 groupBy() 子句中 . 由于 ONLY_FULL_GROUP_BY 模式, transactions.* 之类的东西可能无效 . 但它也可能没有意义 .

  • 0

    您可以将SUM(金额)与groupBy(日期)一起使用

相关问题