SQL Window Functions in Hindi Best Tutorial In 2026

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;
SQL

PARTITION 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_idnamedepartmentsalary
1RahulIT50000
2AmanIT60000
3NehaHR40000
4PoojaHR45000

Example 1: Department Wise Average Salary

SELECT 
    name,
    department,
    salary,
    AVG(salary) OVER (PARTITION BY department) AS dept_avg_salary
FROM employee;
SQL

✅ Output

namedepartmentsalarydept_avg_salary
RahulIT5000055000
AmanIT6000055000
NehaHR4000042500
PoojaHR4500042500

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;
SQL

3️⃣ DENSE_RANK()

Same value → same rank
लेकिन gap नहीं छोड़ता

SELECT 
 name,
 salary,
 DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employee;
SQL

4️⃣ 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 BYPARTITION BY
Rows merge हो जाती हैंRows merge नहीं होती
Summary resultDetailed result
Aggregate functionWindow 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;
SQL

Q2️⃣ 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;
SQL

Q3️⃣ 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;
SQL

Q4️⃣ Calculate Running Total of Daily Sales

👉 Concept: Cumulative Sum

SELECT order_date,
       SUM(amount) OVER (ORDER BY order_date) AS running_sales
FROM orders;
SQL

Q5️⃣ 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;
SQL

Q6️⃣ 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
);
SQL

Q7️⃣ 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;
SQL

Q8️⃣ 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;
SQL

Q9️⃣ 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;
SQL

Q🔟 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?

free business listing

error: Content is protected!! You are not allowed to copy.