A window function performs a calculation across a set of table rows related to the current row without collapsing the rows 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 keep all rows and add calculated values alongside each row.
Click to reveal answer
intermediate
Why are window functions powerful for data analysis?
They allow calculations like running totals, rankings, and moving averages without losing row-level detail, making complex queries simpler and more efficient.
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 operates on, specifying partitioning and ordering without grouping rows.
Click to reveal answer
beginner
Give an example of a common window function use case.
Calculating a running total of sales per month while still showing each individual sale row.
Click to reveal answer
What does a window function allow you to do in SQL?
ACreate new tables from existing ones
BDelete duplicate rows automatically
CCalculate values across rows without collapsing them
DOnly group rows and return one result per group
✗ Incorrect
Window functions calculate values across related rows but keep all rows visible.
Which clause is essential to define the window for a window function?
AGROUP BY
BOVER()
CORDER BY
DWHERE
✗ Incorrect
The OVER() clause specifies the window or set of rows the function works on.
What is a key advantage of window functions over aggregate functions?
AThey keep all rows and add calculations alongside
BThey only work on single rows
CThey automatically create indexes
DThey can delete rows
✗ Incorrect
Window functions keep all rows and add calculated columns without grouping.
Which of these is a common use of window functions?
AChanging data types
BCreating new databases
CDropping tables
DRunning totals
✗ Incorrect
Running totals are a classic example of window function use.
Can window functions be used without grouping rows?
AYes, they operate without collapsing rows
BNo, they require grouping
COnly in MySQL
DOnly with aggregate functions
✗ Incorrect
Window functions work on rows without grouping or collapsing them.
Explain why window functions are powerful and how they differ from aggregate functions.
Think about how window functions add extra info without losing original rows.
You got /5 concepts.
Describe a real-life scenario where using a window function would be better than a simple aggregate.
Imagine you want to see each sale and also the total sales so far.
You got /4 concepts.
Practice
(1/5)
1. What is the main advantage of using window functions in PostgreSQL?
easy
A. They only work on single rows without considering others.
B. They allow calculations across rows without collapsing the result into fewer rows.
C. They replace the need for JOIN operations.
D. They automatically create new tables for grouped data.
Solution
Step 1: Understand window function behavior
Window functions perform calculations across a set of rows related to the current row but keep all original rows in the output.
Step 2: Compare with aggregation
Unlike aggregation functions that reduce rows, window functions keep row details while adding calculated columns.
Final Answer:
They allow calculations across rows without collapsing the result into fewer rows. -> Option B
Quick Check:
Window functions keep rows and add calculations [OK]
Hint: Window functions keep all rows and add calculations [OK]
Common Mistakes:
Thinking window functions reduce rows like GROUP BY
Confusing window functions with JOINs
Believing window functions only work on single rows
2. Which of the following is the correct syntax to calculate a running total of sales using a window function?
easy
A. SELECT sales, SUM(sales) FROM sales_table WHERE ORDER BY date;
B. SELECT sales, SUM(sales) GROUP BY date FROM sales_table;
C. SELECT sales, SUM(sales) OVER (ORDER BY date) FROM sales_table;
D. SELECT sales, SUM(sales) PARTITION BY date FROM sales_table;
Solution
Step 1: Identify window function syntax
The correct syntax uses SUM() OVER() with ORDER BY inside OVER() to calculate running totals.
Step 2: Check each option
SELECT sales, SUM(sales) OVER (ORDER BY date) FROM sales_table; correctly uses SUM(sales) OVER (ORDER BY date). Options A, B, and D misuse GROUP BY, WHERE, or PARTITION BY without OVER().
Final Answer:
SELECT sales, SUM(sales) OVER (ORDER BY date) FROM sales_table; -> Option C
Quick Check:
Running total uses SUM() OVER (ORDER BY ...) [OK]
Hint: Use OVER() with ORDER BY for running totals [OK]
Common Mistakes:
Using GROUP BY instead of OVER()
Placing ORDER BY outside OVER()
Using PARTITION BY without OVER()
3. Given the table employees with columns department and salary, what will this query return?
SELECT department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees;
medium
A. Ranks employees within each department by salary, highest salary gets rank 1.
B. Ranks all employees together ignoring department, highest salary gets rank 1.
C. Calculates total salary per department.
D. Returns an error because RANK() cannot be used with PARTITION BY.
Solution
Step 1: Understand RANK() with PARTITION BY
RANK() assigns ranks within each partition (department) ordered by salary descending.
Step 2: Analyze query output
Each employee gets a rank starting at 1 for highest salary in their department, ties get same rank.
Final Answer:
Ranks employees within each department by salary, highest salary gets rank 1. -> Option A
Quick Check:
RANK() with PARTITION BY ranks within groups [OK]
Hint: RANK() with PARTITION BY ranks within groups [OK]
Common Mistakes:
Thinking RANK() ignores PARTITION BY
Confusing RANK() with aggregation
Assuming RANK() causes errors with PARTITION BY
4. Identify the error in this query that tries to calculate a cumulative sum of sales per region:
SELECT region, sales, SUM(sales) OVER (PARTITION region ORDER BY date) AS running_total FROM sales_data;
medium
A. SUM() cannot be used as a window function.
B. Missing parentheses around PARTITION BY clause.
C. ORDER BY cannot be used inside OVER().
D. PARTITION keyword should be PARTITION BY.
Solution
Step 1: Check window function syntax
The correct syntax requires PARTITION BY, not just PARTITION.
Step 2: Validate other parts
ORDER BY inside OVER() is valid for running totals, and SUM() is allowed as a window function.
Final Answer:
PARTITION keyword should be PARTITION BY. -> Option D
Quick Check:
Use PARTITION BY, not PARTITION alone [OK]
Hint: Use PARTITION BY, not just PARTITION [OK]
Common Mistakes:
Omitting BY after PARTITION
Thinking ORDER BY is invalid in OVER()
Believing SUM() can't be a window function
5. You want to find each employee's salary difference from the average salary in their department using window functions. Which query correctly achieves this?
hard
A. SELECT employee, salary, salary - AVG(salary) OVER (PARTITION BY department) AS diff FROM employees;
B. SELECT employee, salary, salary - AVG(salary) FROM employees GROUP BY department;
C. SELECT employee, salary, salary - AVG(salary) OVER () AS diff FROM employees;
D. SELECT employee, salary, salary - AVG(salary) PARTITION BY department FROM employees;
Solution
Step 1: Use AVG() as a window function partitioned by department
AVG(salary) OVER (PARTITION BY department) calculates average salary per department without grouping rows.
Step 2: Subtract average from each employee's salary
Subtracting this average from salary gives the difference per employee.
Final Answer:
SELECT employee, salary, salary - AVG(salary) OVER (PARTITION BY department) AS diff FROM employees; -> Option A
Quick Check:
Window AVG() with PARTITION BY calculates group average per row [OK]
Hint: Use AVG() OVER (PARTITION BY ...) for group averages per row [OK]
Common Mistakes:
Using GROUP BY which collapses rows
Omitting PARTITION BY causing overall average
Incorrect syntax without OVER()
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.