APPLY in Subqueries & Top-N Selection (SQL Server)

APPLY in Subqueries & Top-N Selection (SQL Server)

💡 APPLY in Subqueries & Top-N Selection (SQL Server)

APPLY (CROSS APPLY / OUTER APPLY) SQL Server का एक powerful feature है, जो हमें per-row subqueries और Top-N selection करने में मदद करता है — जो कि traditional JOIN से possible नहीं है।

📘 MEMORY: APPLY क्या होता है?

  • CROSS APPLY = INNER JOIN जैसा
  • OUTER APPLY = LEFT JOIN जैसा

🎯 कब इस्तेमाल करें?

जब आपको हर row के लिए dynamically एक subquery चलानी हो — जैसे:

  • हर customer का latest order
  • हर student का highest scoring subject
  • हर employee की last login details

🔍 Example 1: Top 1 Order per Customer

SELECT 
    C.CustomerName,
    O.OrderID,
    O.OrderDate,
    O.TotalAmount
FROM Customers C
CROSS APPLY (
    SELECT TOP 1 *
    FROM Orders O
    WHERE O.CustomerID = C.CustomerID
    ORDER BY O.OrderDate DESC
) O

🧾 Output:

CustomerNameOrderIDOrderDateTotalAmount
Amit Verma1052024-12-20₹1,200
Neha Singh1122025-01-15₹900
Raj Kumar1202025-02-02₹2,450
🔍 Note: CROSS APPLY हर customer के लिए सिर्फ एक latest order लाएगा।

📊 Example 2: Order Summary using OUTER APPLY

SELECT 
    C.CustomerName,
    O.TotalOrders,
    O.TotalAmount
FROM Customers C
OUTER APPLY (
    SELECT 
        COUNT(*) AS TotalOrders,
        SUM(TotalAmount) AS TotalAmount
    FROM Orders O
    WHERE O.CustomerID = C.CustomerID
) O

🔥 Example 3: हर Product की Latest 3 Reviews

SELECT 
    P.ProductName,
    R.ReviewText,
    R.Rating
FROM Products P
CROSS APPLY (
    SELECT TOP 3 *
    FROM ProductReviews R
    WHERE R.ProductID = P.ProductID
    ORDER BY R.CreatedDate DESC
) R

🎯 कब CROSS और कब OUTER APPLY?

Use CaseAPPLY Type
सिर्फ वही rows जिनके पास matching detail होCROSS APPLY
हर row + NULLs भी चाहिए अगर detail न मिलेOUTER APPLY

📌 APPLY vs JOIN

FeatureJOINAPPLY
Static join
Correlated subquery
Top N per row
Per row aggregation

💬 Interview Question

Q: CROSS APPLY और INNER JOIN में क्या फ़र्क है?

Ans: INNER JOIN दो tables को static रूप से जोड़ता है, लेकिन CROSS APPLY हर row के लिए dynamic subquery को allow करता है — जिससे per-row logic possible होता है।

🧠 Conclusion

  • JOINs simple static matching के लिए हैं
  • APPLY powerful row-wise subqueries और Top-N selection के लिए best है
✅ Pro Tip: Performance के लिए indexes और filters सही से apply करें जब आप APPLY का इस्तेमाल करें।

Post a Comment

0 Comments