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

时间:2017-11-18 04:15:32

标签: php mysql laravel-5.3

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 :(得分:1)

假设您的表名为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()子句中。由于transactions.*模式,ONLY_FULL_GROUP_BY之类的内容可能无效。但它也可能没有意义。

答案 1 :(得分:0)

您可以将SUM(金额)与groupBy(日期)

一起使用