Window functions are one of the most powerful SQL features used in data analytics, reporting, and advanced SQL interviews.
๐ They allow you to perform calculations across rows without collapsing them like GROUP BY.
In simple words:
GROUP BY โ reduces rows
Window Functions โ keep rows but add calculated values
๐ง Basic Syntax of Window Functions
SELECT column, window_function()Components:
OVER (
PARTITION BY column
ORDER BY column
)
FROM table;
- OVER() โ defines the window
- PARTITION BY โ splits data into groups
- ORDER BY โ defines calculation order
๐น 1๏ธโฃ ROW_NUMBER()
Assigns a unique sequential number to rows.
SELECT name, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) AS rankResult:
FROM employees;
name | salary | rank
Rahul | 90000 | 1
Priya | 85000 | 2
Amit | 85000 | 3
๐ Even if salaries are same, numbers stay unique.
๐น 2๏ธโฃ RANK()
Assigns rank but skips numbers when ties occur.
SELECT name, salary, RANK() OVER(ORDER BY salary DESC) AS rankResult:
FROM employees;
name | salary | rank
Rahul | 90000 | 1
Priya | 85000 | 2
Amit | 85000 | 2
Neha | 80000 | 4
Notice rank 3 is skipped.
๐น 3๏ธโฃ DENSE_RANK()
Similar to RANK but does not skip numbers.
SELECT name, salary, DENSE_RANK() OVER(ORDER BY salary DESC) AS rankResult:
FROM employees;
name | salary | rank
Rahul | 90000 | 1
Priya | 85000 | 2
Amit | 85000 | 2
Neha | 80000 | 3
๐น 4๏ธโฃ PARTITION BY
Used to divide rows into groups before calculation.
Example: Rank employees within each department
SELECT name, department, salary,๐ Each department gets its own ranking.
RANK() OVER(
PARTITION BY department
ORDER BY salary DESC
) AS dept_rank
FROM employees;
๐น 5๏ธโฃ LAG()
Used to access previous row values.
Example: Compare sales with previous day.
SELECT date, sales, LAG(sales) OVER(ORDER BY date) AS previous_sales๐น 6๏ธโฃ LEAD()
FROM sales;
Used to access next row values.
SELECT date, sales, LEAD(sales) OVER(ORDER BY date) AS next_salesโญ Real Data Analyst Examples
FROM sales;
Top 3 highest salaries
SELECT **Running total of sales
FROM (
SELECT name, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) AS rn
FROM employees
) t
WHERE rn <= 3;
SELECT date, sales, SUM(sales) OVER(ORDER BY date) AS running_totalRank products by category
FROM sales;
SELECT product_name, category, price,๐ฏ Common Interview Questions
RANK() OVER(PARTITION BY category ORDER BY price DESC) AS rank
FROM products;
โ Difference between ROW_NUMBER, RANK, DENSE_RANK
โ Find Nth highest salary
โ Running totals using window functions
โ Compare current row with previous row
โ Rank employees by department
๐ Mini Practice Tasks
Task 1: Assign row numbers to employees by salary.
Task 2: Rank employees by salary.
Task 3: Find top 3 highest salaries using window functions.
Task 4: Calculate running total of sales.
๐ผ What You Must Master
โ ROW_NUMBER()
โ RANK()
โ DENSE_RANK()
โ PARTITION BY
โ LAG() / LEAD()
โ Running totals
These functions are used heavily in real analytics queries and SQL interviews.
Double Tap โฅ๏ธ For More