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.*
之类的东西可能无法工作。但它也可能没有意义。
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.*
之类的东西可能无法工作。但它也可能没有意义。