Query\Builder::aggregate() returns incorrect result when used with groupBy() #57740
+29
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related: #57738
The
Illuminate\Database\Query\Builder::aggregate()method (used bycount(),sum(),min(),max(),avg()) returns only the first row when combined withgroupBy(). This behavior is incorrect, misleading, and inconsistent with SQL semantics.Users expect:
count()→ number of groupssum()→ sum of group totalsmin()→ smallest group valueBut Laravel returns only the first group's result.
Current (Buggy) Behavior
Generated SQL (Laravel)
Laravel Returns 3 // Only first row — WRONG if user expects group count
User confusion:
“SQL shows 2 groups, but Laravel returns 3?” → Actually returns first group count, not total or group count.
Steps To Reproduce
Example Data