What is the main difference between a window function and GROUP BY in SQL?
GROUP BY groups rows and returns one result per group, reducing the number of rows. Window functions perform calculations across rows related to the current row without reducing the number of rows.
Click to reveal answer
beginner
How does a window function maintain the original number of rows?
Window functions calculate values over a set of rows defined by a window but return a value for each original row, keeping all rows intact.
Click to reveal answer
beginner
Give a real-life analogy for GROUP BY in SQL.
GROUP BY is like sorting a pile of mail by city and then counting how many letters go to each city. You get one count per city, not per letter.
Click to reveal answer
beginner
Give a real-life analogy for window functions in SQL.
Window functions are like looking at each letter in the mail pile and noting how many letters are from the same city, but you keep each letter separate.
Click to reveal answer
intermediate
Can you use window functions and GROUP BY together in a query?
Yes, you can use GROUP BY to aggregate data and then apply window functions on the aggregated results to perform further calculations without losing row details.
Click to reveal answer
What happens to the number of rows when you use GROUP BY in SQL?
AThe number of rows decreases
BThe number of rows stays the same
CThe number of rows increases
DRows are duplicated
✗ Incorrect
GROUP BY groups rows and returns one row per group, so the total number of rows decreases.
Which SQL feature allows you to calculate a value across rows but keep all original rows?
AWHERE clause
BGROUP BY
CJOIN
DWindow function
✗ Incorrect
Window functions calculate values over a set of rows but return a result for each original row, keeping all rows.
If you want to find the total sales per region and also show each sale with the region total, which should you use?
AOnly GROUP BY
BOnly window functions
CGROUP BY with window functions
DNeither
✗ Incorrect
Window functions compute the region total for each sale without reducing rows, e.g., SUM(sales) OVER (PARTITION BY region).
Which of these is true about window functions?
AThey can access data from other rows without grouping
BThey filter rows
CThey only work with GROUP BY
DThey reduce the number of rows
✗ Incorrect
Window functions can look at other rows related to the current row without grouping or reducing rows.
What does GROUP BY do to the data?
AFilters rows
BSorts rows only
CAggregates rows into groups
DDuplicates rows
✗ Incorrect
GROUP BY aggregates rows into groups based on specified columns.
Explain in your own words how window functions differ from GROUP BY in SQL.
Think about whether the number of rows changes.
You got /4 concepts.
Describe a real-life example that helps you remember the difference between window functions and GROUP BY.
Use simple everyday situations like sorting mail or counting items.
You got /3 concepts.
Practice
(1/5)
1. What is the main difference between a GROUP BY clause and a window function in SQL?
easy
A. Both GROUP BY and window functions always return the same number of rows.
B. GROUP BY keeps all rows and adds summary data; window functions group rows and return one row per group.
C. GROUP BY groups rows and returns one row per group; window functions keep all rows and add summary data.
D. Window functions cannot perform calculations like sums or averages.
Solution
Step 1: Understand GROUP BY behavior
GROUP BY groups rows by specified columns and returns one row per group with aggregated results.
Step 2: Understand window function behavior
Window functions calculate aggregates over partitions but keep all original rows visible, adding summary columns.
Final Answer:
GROUP BY groups rows and returns one row per group; window functions keep all rows and add summary data. -> Option C
Quick Check:
Window functions keep detail, GROUP BY groups rows [OK]
Hint: Window functions keep rows; GROUP BY collapses them [OK]
Common Mistakes:
Thinking window functions reduce rows like GROUP BY
Believing GROUP BY keeps all original rows
Assuming window functions can't do aggregates
2. Which of the following SQL queries correctly uses a window function to calculate a running total of sales per employee?
easy
A. SELECT employee_id, sale_amount, SUM(sale_amount) OVER (ORDER BY sale_date) AS running_total FROM sales GROUP BY employee_id;
B. SELECT employee_id, sale_amount, SUM(sale_amount) GROUP BY employee_id ORDER BY sale_date AS running_total FROM sales;
C. SELECT employee_id, sale_amount, SUM(sale_amount) FROM sales WINDOW (PARTITION BY employee_id ORDER BY sale_date) AS running_total;
D. SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id ORDER BY sale_date) AS running_total FROM sales;
Solution
Step 1: Identify correct window function syntax
SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id ORDER BY sale_date) AS running_total FROM sales; uses SUM() OVER (PARTITION BY ... ORDER BY ...), which is the correct syntax for running totals per employee.
Step 2: Check other options for syntax errors
Options B, C, and D misuse GROUP BY or WINDOW clauses incorrectly, causing syntax errors or wrong logic.
Final Answer:
The correct query: SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id ORDER BY sale_date) AS running_total FROM sales; -> Option D
Quick Check:
Window function syntax = SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id ORDER BY sale_date) AS running_total FROM sales; [OK]
Hint: Window functions use OVER(), GROUP BY does not [OK]
Common Mistakes:
Using GROUP BY with window function syntax
Misplacing WINDOW clause
Omitting OVER() for window functions
3. Given the table sales(employee_id, sale_amount) with data: 1, 100 1, 200 2, 150 2, 50 What is the output of this query?
SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id) AS total_sales FROM sales ORDER BY employee_id, sale_amount;
medium
A. 1, 100, 300 1, 200, 300 2, 50, 200 2, 150, 200
B. 1, 100, 100 1, 200, 200 2, 50, 50 2, 150, 150
C. 1, 100, 300 1, 200, 500 2, 50, 200 2, 150, 350
D. 1, 100, 300 1, 200, 300 2, 50, 150 2, 150, 150
Solution
Step 1: Calculate total sales per employee using window function
For employee 1: 100 + 200 = 300; for employee 2: 150 + 50 = 200.
Step 2: Assign total_sales to each row without grouping
Each row for employee 1 shows 300, each for employee 2 shows 200, preserving all rows.
Final Answer:
Rows show total sales per employee repeated: 1,100,300; 1,200,300; 2,50,200; 2,150,200. -> Option A
Quick Check:
Window sums repeat per row, not grouped [OK]
Hint: Window sums repeat per row; GROUP BY sums once per group [OK]
Common Mistakes:
Confusing window sum with grouped sum
Expecting fewer rows after window sum
Mixing order of rows in output
4. Consider this query:
SELECT employee_id, sale_amount, SUM(sale_amount) OVER (PARTITION BY employee_id ORDER BY sale_date) AS running_total FROM sales GROUP BY employee_id, sale_amount, sale_date;
What is the main issue with this query?
medium
A. The query will run but return incorrect running totals.
B. The window function must be replaced with a GROUP BY aggregate.
C. The GROUP BY clause is unnecessary but allowed here.
D. It will cause a syntax error because window functions cannot be used with GROUP BY.
Solution
Step 1: Window functions execute after GROUP BY
Window functions are applied to the result set produced after GROUP BY and HAVING, so the query runs without syntax error.
Step 2: GROUP BY distorts the running total
GROUP BY employee_id, sale_amount, sale_date collapses multiple rows sharing the same values in these columns into one row each before the window function computes the running total, leading to incorrect sums if duplicate combinations exist.
Final Answer:
The query will run but return incorrect running totals. -> Option A
Quick Check:
GROUP BY collapses rows before window functions run [OK]
Hint: Window functions run after GROUP BY; grouping can collapse rows unexpectedly [OK]
Common Mistakes:
Assuming syntax error when mixing GROUP BY and window functions
Thinking GROUP BY has no effect on subsequent window calculations
Overlooking row collapse from GROUP BY before window execution
5. You want to find each employee's sale amount along with the average sale amount of their department, but keep all individual sales visible. Which approach is best?
hard
A. Use GROUP BY department_id to get average sales, then join back to sales table.
B. Use a window function like AVG(sale_amount) OVER (PARTITION BY department_id) to add average per row.
C. Use GROUP BY employee_id to get average sales per employee.
D. Use a subquery with GROUP BY employee_id and join on employee_id.
Solution
Step 1: Understand requirement to keep all individual sales
We want to keep each sale row visible, not collapse them by grouping.
Step 2: Choose window function to add department average per row
Window function AVG() OVER (PARTITION BY department_id) adds average without grouping rows.
Step 3: Compare with other options
Options A, C, D use GROUP BY which collapses rows or require joins, making query complex.
Final Answer:
Use window function to add department average per row, keeping all sales visible. -> Option B
Quick Check:
Window functions keep detail and add group info [OK]
Hint: Window functions add group info without hiding rows [OK]
Common Mistakes:
Using GROUP BY and losing individual rows
Overcomplicating with joins instead of window functions
Grouping by employee instead of department
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.