📖 Scenario: You are building a simple Laravel application to manage sales data for a small store. You want to calculate some summary statistics like the total number of sales, the total revenue, and the average sale amount.
🎯 Goal: Build a Laravel Eloquent query that uses aggregate functions count(), sum(), and avg() on a Sale model to get the total sales count, total revenue, and average sale amount.
📋 What You'll Learn
Create a Sale model with a price attribute
Define a variable to hold a minimum price filter
Use Eloquent aggregate methods count(), sum(), and avg() with the filter
Store the results in variables named totalSales, totalRevenue, and averageSale
💡 Why This Matters
🌍 Real World
Stores and businesses often need to calculate total sales, revenue, and average sale amounts to understand performance.
💼 Career
Knowing how to use Laravel collections and aggregate functions is essential for backend developers working with data summaries and reports.
Progress0 / 4 steps
1
Create the Sales Data Array
Create a variable called sales as a collection of arrays with these exact entries: ['price' => 100], ['price' => 200], ['price' => 300], ['price' => 400], ['price' => 500].
Laravel
Hint
Use collect([]) to create a Laravel collection with the given arrays inside.
2
Set a Minimum Price Filter
Create a variable called minPrice and set it to 200 to filter sales with price greater or equal to this value.
Laravel
Hint
Just create a variable $minPrice and assign the number 200.
3
Filter Sales and Calculate Aggregates
Use the filter() method on $sales to keep only sales with price greater or equal to $minPrice. Then create variables totalSales with the count of filtered sales, totalRevenue with the sum of price, and averageSale with the average price.
Laravel
Hint
Use filter() with a callback to keep sales with price >= $minPrice. Then use count(), sum('price'), and avg('price') on the filtered collection.
4
Return the Aggregates in an Array
Create a variable called summary that is an array with keys 'totalSales', 'totalRevenue', and 'averageSale' set to the respective variables.
Laravel
Hint
Create an associative array $summary with keys matching the variable names and assign the variables as values.
Practice
(1/5)
1. What does the count() method do in Laravel Eloquent?
easy
A. Returns the number of records matching the query
B. Calculates the sum of a column
C. Finds the average value of a column
D. Deletes all records in the table
Solution
Step 1: Understand the purpose of count()
The count() method counts how many records match the query conditions.
Step 2: Compare with other aggregate methods
Unlike sum() or avg(), count() returns a number of rows, not a calculation on column values.
Final Answer:
Returns the number of records matching the query -> Option A
Quick Check:
count() = number of records [OK]
Hint: count() counts rows, sum() and avg() work on columns [OK]
Common Mistakes:
Confusing count() with sum() or avg()
Thinking count() returns column values
Assuming count() deletes records
2. Which of the following is the correct syntax to get the sum of the price column using Eloquent?
easy
A. Product::sum(['price']);
B. Product::sum(price);
C. Product->sum('price');
D. Product::sum('price');
Solution
Step 1: Identify correct method call syntax
In Laravel Eloquent, static calls use double colon :: and column names must be strings in quotes.
Step 2: Check each option
Product::sum('price'); uses Product::sum('price'); which is correct. Product::sum(price); misses quotes, C uses arrow on class, D passes array incorrectly.
Final Answer:
Product::sum('price'); -> Option D
Quick Check:
sum('column') needs quotes and :: [OK]
Hint: Use quotes around column name and :: for static call [OK]
The avg() method requires the column name as a string, so it must be quoted.
Step 2: Identify the error cause
Without quotes, PHP treats age as a constant or variable, causing an error or unexpected behavior.
Final Answer:
Missing quotes around the column name 'age' -> Option B
Quick Check:
Column names must be strings in quotes [OK]
Hint: Always quote column names in aggregate methods [OK]
Common Mistakes:
Omitting quotes around column names
Thinking avg() needs multiple parameters
Assuming avg() requires where()
5. You want to get the average price of products that are in stock (stock > 0). Which Eloquent query is correct?
hard
A. Product::where('stock', '>', 0)->avg('price');
B. Product::avg('price')->where('stock', '>', 0);
C. Product::where('stock', '>', 0)->sum('price') / Product::count();
D. Product::sum('price')->where('stock', '>', 0) / Product::count();
Solution
Step 1: Filter products with stock > 0
The where('stock', '>', 0) filters only products that are in stock.
Step 2: Calculate average price of filtered products
The avg('price') calculates the average price of those filtered products.
Step 3: Check other options for correctness
Product::avg('price')->where('stock', '>', 0); calls avg() before where(), which is invalid. Manual calculations with sum divided by count do not filter correctly or mix sum and count improperly.
Final Answer:
Product::where('stock', '>', 0)->avg('price'); -> Option A
Quick Check:
Filter first, then aggregate [OK]
Hint: Chain where() before avg() to filter then calculate [OK]
Common Mistakes:
Calling aggregate before where()
Manually dividing sum by count without filtering
Mixing sum() and avg() incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.