What does the OVER clause with PARTITION BY do in SQL?
It divides the result set into partitions (groups) and performs a window function on each partition separately, without collapsing rows.
Click to reveal answer
beginner
How is PARTITION BY different from GROUP BY?
PARTITION BY groups rows for window functions but keeps all rows in the output, while GROUP BY aggregates rows and reduces the number of rows returned.
Click to reveal answer
intermediate
Example: What does this query do?
SELECT department, employee, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank FROM employees;
It ranks employees by salary within each department, showing the highest salary as rank 1 for each department separately.
Click to reveal answer
intermediate
Can you use ORDER BY inside the OVER clause with PARTITION BY? Why?
Yes, ORDER BY inside OVER defines the order of rows within each partition for the window function to calculate results like rank or running totals.
Click to reveal answer
beginner
True or False: The OVER clause with PARTITION BY changes the number of rows returned by the query.
False. It keeps all rows but adds calculated columns based on partitions.
Click to reveal answer
What does PARTITION BY do in an OVER clause?
AGroups rows for window function calculations without reducing rows
BAggregates rows and reduces the number of rows
CSorts the entire result set
DFilters rows based on a condition
✗ Incorrect
PARTITION BY groups rows for window functions but keeps all rows in the output.
Which window function can be used with OVER (PARTITION BY ... ORDER BY ...)?
ACOUNT() without OVER
BDELETE
CSUM() without OVER
DRANK()
✗ Incorrect
RANK() is a window function that can use PARTITION BY and ORDER BY inside OVER.
Does using PARTITION BY inside OVER clause reduce the number of rows returned?
AYes, it filters rows
BYes, it aggregates rows
CNo, it keeps all rows
DNo, it deletes rows
✗ Incorrect
PARTITION BY groups rows for calculations but does not reduce the number of rows.
What is the purpose of ORDER BY inside the OVER clause with PARTITION BY?
ATo order rows within each partition for window function calculation
BTo order the entire result set
CTo filter rows
DTo group rows
✗ Incorrect
ORDER BY inside OVER orders rows within each partition for functions like RANK or ROW_NUMBER.
Which SQL clause would you use to calculate a running total per group?
AGROUP BY
BOVER (PARTITION BY ... ORDER BY ...)
CWHERE
DHAVING
✗ Incorrect
Running totals per group are calculated using window functions with OVER and PARTITION BY.
Explain how the OVER clause with PARTITION BY works and give a simple example.
Think about dividing rows into groups but keeping all rows visible.
You got /3 concepts.
Describe a real-life scenario where you would use the OVER clause with PARTITION BY in a query.
Imagine you want to rank or sum values within categories without losing detail.
You got /3 concepts.
Practice
(1/5)
1. What does the PARTITION BY clause do when used with the OVER clause in SQL?
easy
A. It divides the result set into groups to perform calculations within each group.
B. It filters rows before aggregation happens.
C. It sorts the entire result set globally.
D. It removes duplicate rows from the result.
Solution
Step 1: Understand the role of PARTITION BY
The PARTITION BY clause groups rows based on column values, similar to grouping in real life like sorting students by class.
Step 2: See how OVER uses PARTITION BY
The OVER clause applies functions like SUM or ROW_NUMBER within each group separately, not on the whole table.
Final Answer:
It divides the result set into groups to perform calculations within each group. -> Option A
Quick Check:
PARTITION BY = group rows for calculations [OK]
Hint: Think of PARTITION BY as grouping rows inside a window function [OK]
Common Mistakes:
Confusing PARTITION BY with WHERE filtering
Thinking PARTITION BY sorts all rows globally
Assuming PARTITION BY removes duplicates
2. Which of the following is the correct syntax to calculate a running total of sales per department using OVER with PARTITION BY?
easy
A. SELECT department, sales, SUM(sales) OVER ORDER BY date PARTITION BY department AS running_total FROM sales_data;
B. SELECT department, sales, SUM(sales) OVER (PARTITION BY department ORDER BY date) AS running_total FROM sales_data;
C. SELECT department, sales, SUM(sales) PARTITION BY department OVER ORDER BY date AS running_total FROM sales_data;
D. SELECT department, sales, SUM(sales) OVER (ORDER BY date PARTITION BY department) AS running_total FROM sales_data;
Solution
Step 1: Identify correct OVER clause order
The correct syntax places PARTITION BY before ORDER BY inside the parentheses after OVER.
Step 2: Check each option's syntax
SELECT department, sales, SUM(sales) OVER (PARTITION BY department ORDER BY date) AS running_total FROM sales_data; correctly uses SUM(sales) OVER (PARTITION BY department ORDER BY date). Others misplace PARTITION BY or OVER keywords.
Final Answer:
SELECT department, sales, SUM(sales) OVER (PARTITION BY department ORDER BY date) AS running_total FROM sales_data; -> Option B
Quick Check:
PARTITION BY before ORDER BY inside OVER [OK]
Hint: Remember: OVER (PARTITION BY ... ORDER BY ...) is the correct order [OK]
Common Mistakes:
Swapping PARTITION BY and ORDER BY order
Placing PARTITION BY outside OVER parentheses
Using PARTITION BY without OVER
3. Given the table Employees with columns Department and Salary, what will the following query return?
SELECT Department, Salary, RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS SalaryRank FROM Employees;
medium
A. Returns the salary and department without any ranking.
B. Ranks salaries across all employees ignoring departments.
C. Calculates the total salary per department.
D. Ranks salaries within each department from highest to lowest, starting at 1 for the highest salary.
Solution
Step 1: Understand RANK() with PARTITION BY
The RANK() function assigns ranks starting at 1 within each partition (department), ordered by salary descending.
Step 2: Analyze the query output
Each employee gets a rank based on salary within their department, highest salary ranked 1, ties get same rank.
Final Answer:
Ranks salaries within each department from highest to lowest, starting at 1 for the highest salary. -> Option D
Quick Check:
RANK() OVER PARTITION BY groups and ranks rows [OK]
Hint: RANK() with PARTITION BY ranks within groups, not whole table [OK]
Common Mistakes:
Thinking RANK() ignores PARTITION BY
Confusing RANK() with SUM()
Assuming ranking is global, not per group
4. Identify the error in this SQL query:
SELECT employee_id, department, SUM(salary) OVER PARTITION BY department FROM employees;
medium
A. department column cannot be used in PARTITION BY.
B. SUM() cannot be used with OVER clause.
C. Missing parentheses around PARTITION BY clause inside OVER.
D. employee_id must be included in PARTITION BY.
Solution
Step 1: Check OVER clause syntax
The OVER clause must have parentheses enclosing PARTITION BY and other clauses.
Step 2: Identify missing parentheses
The query misses parentheses after OVER, it should be OVER (PARTITION BY department).
Final Answer:
Missing parentheses around PARTITION BY clause inside OVER. -> Option C
Quick Check:
OVER requires parentheses around PARTITION BY [OK]
Hint: Always put parentheses after OVER, even if only PARTITION BY used [OK]
Common Mistakes:
Omitting parentheses after OVER
Using aggregate without OVER for window function
Including wrong columns in PARTITION BY
5. You want to find each student's score rank within their class and also show the average score of their class. Which SQL query correctly uses OVER with PARTITION BY to achieve this?
hard
A. SELECT student_id, class, score, RANK() OVER (PARTITION BY class ORDER BY score DESC) AS rank_in_class, AVG(score) OVER (PARTITION BY class) AS avg_class_score FROM student_scores;
B. SELECT student_id, class, score, RANK() OVER (ORDER BY score DESC PARTITION BY class) AS rank_in_class, AVG(score) OVER (PARTITION BY class) AS avg_class_score FROM student_scores;
C. SELECT student_id, class, score, RANK() PARTITION BY class ORDER BY score DESC AS rank_in_class, AVG(score) OVER (class) AS avg_class_score FROM student_scores;
D. SELECT student_id, class, score, RANK() OVER (PARTITION BY class ORDER BY score) AS rank_in_class, AVG(score) OVER (PARTITION BY class ORDER BY score) AS avg_class_score FROM student_scores;
Solution
Step 1: Use correct syntax for RANK() and AVG() with PARTITION BY
Both functions must have OVER (PARTITION BY class ...). RANK() orders descending for highest score first; AVG() just partitions by class.
Step 2: Check each option's correctness
SELECT student_id, class, score, RANK() OVER (PARTITION BY class ORDER BY score DESC) AS rank_in_class, AVG(score) OVER (PARTITION BY class) AS avg_class_score FROM student_scores; correctly uses RANK() OVER (PARTITION BY class ORDER BY score DESC) and AVG(score) OVER (PARTITION BY class). Others have syntax errors or wrong order.
Final Answer:
SELECT student_id, class, score, RANK() OVER (PARTITION BY class ORDER BY score DESC) AS rank_in_class, AVG(score) OVER (PARTITION BY class) AS avg_class_score FROM student_scores; -> Option A
Quick Check:
Use OVER (PARTITION BY ...) with correct order and parentheses [OK]
Hint: Use separate OVER clauses with PARTITION BY for each window function [OK]
Common Mistakes:
Mixing ORDER BY and PARTITION BY order inside OVER
Missing parentheses around PARTITION BY
Using PARTITION BY without OVER
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.