What is the main purpose of window functions in SQL?
Window functions allow you to perform calculations across a set of rows related to the current row without collapsing the result into a single output row.
Click to reveal answer
beginner
How do window functions differ from aggregate functions?
Aggregate functions group rows and return one result per group, while window functions compute values across rows but keep each row separate in the output.
Click to reveal answer
intermediate
Why can't aggregate functions alone solve all data analysis problems?
Because aggregate functions reduce multiple rows into one, losing individual row details, whereas window functions keep row details while adding summary info.
Click to reveal answer
beginner
Give a real-life example where window functions are useful.
Calculating a running total of sales per day while still showing each day's sales separately is a common use of window functions.
Click to reveal answer
beginner
What does the OVER() clause do in a window function?
The OVER() clause defines the window or set of rows the function should consider for each row, such as partitioning or ordering the data.
Click to reveal answer
What is a key benefit of using window functions in SQL?
AThey delete duplicate rows automatically.
BThey replace the need for any aggregate functions.
CThey allow calculations across rows without grouping the result into one row.
DThey create new tables from existing data.
✗ Incorrect
Window functions perform calculations across related rows but keep each row separate, unlike aggregate functions that group rows.
Which clause is essential to define the rows a window function works on?
AGROUP BY
BWHERE
CORDER BY
DOVER()
✗ Incorrect
The OVER() clause specifies the window or set of rows for the window function to operate on.
What happens if you use an aggregate function without a GROUP BY clause?
AIt returns a single result for the entire table.
BIt returns one result per row.
CIt causes a syntax error.
DIt returns the first row only.
✗ Incorrect
Aggregate functions without GROUP BY return a single summary result for all rows.
Which of these is NOT a use case for window functions?
ACalculating running totals
BFiltering rows based on conditions
CCalculating moving averages
DRanking rows within groups
✗ Incorrect
Filtering rows is done with WHERE or HAVING clauses, not window functions.
Why might you prefer window functions over subqueries for some calculations?
AWindow functions are easier to read and more efficient for row-wise calculations.
BSubqueries always run faster.
CWindow functions delete duplicate data automatically.
DSubqueries cannot perform calculations.
✗ Incorrect
Window functions often provide clearer syntax and better performance for calculations across rows.
Explain in your own words why window functions are needed in SQL.
Think about how you want to calculate values without losing row details.
You got /4 concepts.
Describe a real-life scenario where window functions help solve a problem.
Imagine you want to see daily sales and also a total that grows each day.
You got /3 concepts.
Practice
(1/5)
1. Why are window functions needed in SQL? SELECT with window functions can do what that regular aggregation cannot?
easy
A. They speed up query execution by skipping indexes.
B. They allow calculations across rows without hiding individual rows.
C. They automatically create new tables for results.
D. They replace the need for JOIN operations.
Solution
Step 1: Understand aggregation vs window functions
Regular aggregation groups rows and returns fewer rows, hiding details.
Step 2: Identify window function behavior
Window functions calculate values across rows but keep all original rows visible.
Final Answer:
They allow calculations across rows without hiding individual rows. -> Option B
Quick Check:
Window functions keep rows visible = A [OK]
Hint: Window functions keep all rows, aggregations reduce rows [OK]
Common Mistakes:
Thinking window functions create new tables
Confusing window functions with JOINs
Believing window functions speed up queries
2. Which of the following is the correct syntax to use a window function in SQL?
easy
A. SELECT name, RANK() OVER (ORDER BY score) FROM players;
B. SELECT name, RANK(score) FROM players ORDER BY score;
C. SELECT name, RANK() FROM players GROUP BY score;
D. SELECT name, RANK OVER (ORDER BY score) FROM players;
Solution
Step 1: Recall window function syntax
Window functions use function() OVER (PARTITION BY ... ORDER BY ...).
Step 2: Check each option
SELECT name, RANK() OVER (ORDER BY score) FROM players; correctly uses RANK() OVER (ORDER BY score). Others miss parentheses or OVER keyword.
Final Answer:
SELECT name, RANK() OVER (ORDER BY score) FROM players; -> Option A
Quick Check:
Window function syntax = function() OVER (...) [OK]
Hint: Window functions always use OVER() clause [OK]
Common Mistakes:
Omitting parentheses after function name
Forgetting the OVER keyword
Using GROUP BY instead of window functions
3. Given the table sales with columns id, region, and amount, what will this query return?
SELECT id, region, amount, SUM(amount) OVER (PARTITION BY region ORDER BY id) AS running_total FROM sales ORDER BY id;
medium
A. A running total of sales amount per region, ordered by id, showing all rows.
B. Total sales amount per region, one row per region only.
C. Sum of all sales amounts ignoring region, one total value.
D. Syntax error due to missing GROUP BY clause.
Solution
Step 1: Understand SUM() OVER with PARTITION and ORDER
SUM() OVER (PARTITION BY region ORDER BY id) calculates a running total per region ordered by id.
Step 2: Check output rows
Window functions keep all rows, so all sales rows appear with running totals.
Final Answer:
A running total of sales amount per region, ordered by id, showing all rows. -> Option A
Quick Check:
Running total per group = A [OK]
Hint: SUM() OVER with PARTITION BY gives running totals per group [OK]
Common Mistakes:
Thinking it returns one row per group
Confusing window function with GROUP BY aggregation
Expecting syntax error without GROUP BY
4. Identify the error in this SQL query using a window function:
SELECT employee_id, department, ROW_NUMBER() ORDER BY salary FROM employees;
medium
A. ORDER BY cannot be used inside ROW_NUMBER().
B. employee_id must be inside ROW_NUMBER() function.
C. ROW_NUMBER() requires GROUP BY clause.
D. Missing OVER() clause after ROW_NUMBER() function.
Solution
Step 1: Check window function syntax
ROW_NUMBER() must be followed by OVER() with optional ORDER BY inside it.
Step 2: Identify missing OVER()
The query uses ROW_NUMBER() ORDER BY salary without OVER(), causing syntax error.
Final Answer:
Missing OVER() clause after ROW_NUMBER() function. -> Option D
Quick Check:
Window functions need OVER() [OK]
Hint: Always add OVER() after window functions [OK]
Common Mistakes:
Placing ORDER BY outside OVER()
Thinking GROUP BY is needed for ROW_NUMBER()
Misunderstanding function arguments
5. You want to find each employee's salary rank within their department, but also show all employees with their salaries and ranks. Which SQL approach best achieves this?
hard
A. Use a subquery to calculate ranks and join back to employees table.
B. Use GROUP BY department, salary with RANK() to get ranks per department.
C. Use RANK() OVER (PARTITION BY department ORDER BY salary DESC) to rank salaries per department while keeping all rows.
D. Use ORDER BY salary DESC with LIMIT to get top salaries per department.
Solution
Step 1: Understand the requirement
We want ranks per department and all employees listed with their ranks.
Step 2: Evaluate options
Use RANK() OVER (PARTITION BY department ORDER BY salary DESC) to rank salaries per department while keeping all rows. uses RANK() OVER (PARTITION BY department ORDER BY salary DESC) which ranks salaries per department and keeps all rows visible.
Final Answer:
Use RANK() OVER (PARTITION BY department ORDER BY salary DESC) to rank salaries per department while keeping all rows. -> Option C
Quick Check:
Window function with PARTITION keeps all rows and ranks [OK]
Hint: Use RANK() OVER PARTITION BY to rank within groups [OK]
Common Mistakes:
Using GROUP BY loses individual rows
Using subqueries unnecessarily complicates query
LIMIT filters rows, not ranks all
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.