SQL Window Functions डेटा एनालिसिस के लिए बहुत पावरफुल टूल हैं। साधारण शब्दों में कहें तो, ये फंक्शन्स आपको अपनी टेबल की रोज़ (rows) पर कैलकुलेशन करने की अनुमति देते हैं, लेकिन बिना रोज़ को ग्रुप (Group By) किए।
जब हम GROUP BY का उपयोग करते हैं, तो डेटा छोटा (aggregate) हो जाता है और हम व्यक्तिगत रोज़ की जानकारी खो देते हैं। लेकिन Window Functions के साथ, हर रो (row) अपनी जगह बनी रहती है और कैलकुलेशन उसके साथ ही दिखता है।
👉 Normal aggregate functions (SUM, AVG) में rows merge हो जाती हैं
👉 Window functions में rows merge नहीं होती, बल्कि हर row का data intact रहता है
Sql Window Function का सिंटैक्स (Syntax)
Window Function की सबसे बड़ी पहचान OVER() क्लॉज है।
SELECT column_name,
FUNCTION_NAME() OVER (PARTITION BY ... ORDER BY ...)
FROM table_name;SQLPARTITION BY: यह डेटा को छोटे हिस्सों (Groups) में बांटता है।
ORDER BY: यह तय करता है कि कैलकुलेशन किस क्रम में होगा।
Types of Sql Window Functions:
मुख्यतः इन्हें तीन श्रेणियों में बांटा जा सकता है:
1. Aggregate Window Functions
ये वही पुराने फंक्शन्स हैं (SUM, AVG, COUNT), लेकिन OVER() के साथ इस्तेमाल होने पर ये “Running Total” या “Moving Average” निकालने के काम आते हैं।
- उदाहरण: अगर आपको हर कर्मचारी की सैलरी के साथ-साथ उनके विभाग (Department) की कुल सैलरी भी देखनी हो:
SUM(salary) OVER(PARTITION BY dept_id)
2. Ranking Window Functions
ये डेटा को रैंक देने के काम आते हैं।
ROW_NUMBER(): हर रो को एक यूनिक नंबर देता है।RANK(): समान वैल्यू होने पर एक ही रैंक देता है, लेकिन अगली रैंक को स्किप (skip) कर देता है (जैसे: 1, 2, 2, 4)।DENSE_RANK(): समान वैल्यू पर एक ही रैंक देता है, लेकिन अगली रैंक को स्किप नहीं करता (जैसे: 1, 2, 2, 3)।
3. Value/Analytic Functions
ये पिछली या अगली रो से डेटा खींचने में मदद करते हैं।
LAG(): पिछली रो (Previous Row) की वैल्यू देखने के लिए।LEAD(): अगली रो (Next Row) की वैल्यू देखने के लिए।FIRST_VALUE()/LAST_VALUE(): पूरे ग्रुप की पहली या आखिरी वैल्यू निकालने के लिए।
Example Table (Employee)
| emp_id | name | department | salary |
|---|---|---|---|
| 1 | Rahul | IT | 50000 |
| 2 | Aman | IT | 60000 |
| 3 | Neha | HR | 40000 |
| 4 | Pooja | HR | 45000 |
Example 1: Department Wise Average Salary
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg_salary
FROM employee;SQL✅ Output
| name | department | salary | dept_avg_salary |
|---|---|---|---|
| Rahul | IT | 50000 | 55000 |
| Aman | IT | 60000 | 55000 |
| Neha | HR | 40000 | 42500 |
| Pooja | HR | 45000 | 42500 |
Common SQL Window Functions
1️⃣ ROW_NUMBER()
हर row को unique number देता है
SELECT
name,
salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employee;SQL📌 Highest salary = Row 1
2️⃣ RANK()
Same value पर same rank देता है (gap छोड़ता है)
SELECT
name,
salary,
RANK() OVER (ORDER BY salary DESC) AS rank_no
FROM employee;SQL3️⃣ DENSE_RANK()
Same value → same rank
लेकिन gap नहीं छोड़ता
SELECT
name,
salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employee;SQL4️⃣ SUM() as Window Function
SELECT
name,
department,
salary,
SUM(salary) OVER (PARTITION BY department) AS total_salary
FROM employee;SQL👉 हर employee के साथ department का total salary
5️⃣ Running Total (Cumulative Sum)
SELECT
name,
salary,
SUM(salary) OVER (ORDER BY emp_id) AS running_total
FROM employee;SQL📌 Salary का cumulative total
PARTITION BY vs GROUP BY
| GROUP BY | PARTITION BY |
|---|---|
| Rows merge हो जाती हैं | Rows merge नहीं होती |
| Summary result | Detailed result |
| Aggregate function | Window function |
नीचे Top IT / Product Companies के Company-Based SQL Interview Questions दिए गए हैं,
जो ज़्यादातर Window Functions + Real Business Scenarios पर आधारित होते हैं 👇
(सभी questions actual interview pattern जैसे हैं)
Q1️⃣ Find 2nd Highest Salary (Without LIMIT)
👉 Concept: DENSE_RANK()
SELECT *
FROM (
SELECT name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
FROM employee
) t
WHERE rnk = 2;SQLQ2️⃣ Top 3 Highest Paid Employees From Each Department
👉 Concept: PARTITION BY
SELECT *
FROM (
SELECT name, dept, salary,
DENSE_RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS rnk
FROM employee
) x
WHERE rnk <= 3;SQLQ3️⃣ Find Employees Earning More Than Department Average
👉 Concept: Window + Filter
SELECT *
FROM (
SELECT name, dept, salary,
AVG(salary) OVER (PARTITION BY dept) AS avg_sal
FROM employee
) t
WHERE salary > avg_sal;SQLQ4️⃣ Calculate Running Total of Daily Sales
👉 Concept: Cumulative Sum
SELECT order_date,
SUM(amount) OVER (ORDER BY order_date) AS running_sales
FROM orders;SQLQ5️⃣ Find Highest Order Value Per Customer
👉 Concept: Ranking
SELECT *
FROM (
SELECT customer_id, order_amount,
RANK() OVER (PARTITION BY customer_id ORDER BY order_amount DESC) AS rnk
FROM orders
) t
WHERE rnk = 1;SQLQ6️⃣ Remove Duplicate Records
👉 Concept: ROW_NUMBER()
DELETE FROM employees
WHERE emp_id IN (
SELECT emp_id
FROM (
SELECT emp_id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY emp_id) AS rn
FROM employees
) t
WHERE rn > 1
);SQLQ7️⃣ Find First & Last Login Per User
👉 Concept: MIN, MAX as window function
SELECT user_id,
MIN(login_time) OVER (PARTITION BY user_id) AS first_login,
MAX(login_time) OVER (PARTITION BY user_id) AS last_login
FROM logins;SQLQ8️⃣ Rank Restaurants Based on Monthly Revenue
👉 Concept: Ranking + Month filter
SELECT restaurant_id,
RANK() OVER (ORDER BY SUM(amount) DESC) AS revenue_rank
FROM orders
WHERE MONTH(order_date) = 1
GROUP BY restaurant_id;SQLQ9️⃣ Find Each Order Contribution % to Total Revenue
👉 Concept: Window SUM
SELECT order_id,
amount,
amount * 100.0 / SUM(amount) OVER () AS contribution_percent
FROM orders;SQLQ🔟 Calculate Running Account Balance
👉 Concept: Financial analytics
SELECT txn_date,
amount,
SUM(amount) OVER (ORDER BY txn_date) AS balance
FROM transactions;SQL🔶 Tricky Interview Questions (Very Important ⚠️)
❓ Why Window Functions Cannot Be Used in WHERE Clause?
Answer:
Because WHERE clause पहले execute होती है,
और Window Functions SELECT phase में execute होती हैं।
👉 Solution: Subquery / CTE
❓ Difference Between RANK & DENSE_RANK?
Answer:
- RANK → gaps छोड़ता है
- DENSE_RANK → gaps नहीं छोड़ता
❓ Can We Use GROUP BY With Window Function?

Welcome to HindiTutorials, your go-to platform for learning and mastering concepts in Hindi! Our mission is to make education accessible and simple for everyone by providing high-quality tutorials on programming, technology, and various other topics.