laravel 中使用 groupBy() 函数的求和查询

Summation query using groupBy() function in laravel

A table 其中 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

现在我想显示一个 table,其中 X 将 return 一行,其中包含同一日期的两个值的总和。

预期结果:

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

有人帮忙

您可以将 SUM(Amount) 与 groupBy(date) 一起使用

假设您的 table 名称是 transactions,并且您的示例中的列和数据 table - 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 条件和任何您需要的查询。但是,如果您需要 table 中的更多列 select,您还需要将它们添加到 groupBy() 子句中。由于 ONLY_FULL_GROUP_BY 模式,transactions.* 之类的东西可能无法工作。但它也可能没有意义。