विश्वसनीय रूप से शीर्ष-N ROW लौटाना
जानें कि टाई-ब्रेकर के बिना ORDER BY और LIMIT अनिश्चित परिणाम क्यों दे सकते हैं
विश्वसनीय रूप से शीर्ष-N ROW लौटाना, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Top-N क्वेरियों में छिपी त्रुटि
“मुझे सबसे अधिक वेतन पाने वाले शीर्ष 5 कर्मचारी दीजिए” सुनने में आसान लगता है: ORDER BY salary DESC LIMIT 5। लेकिन साक्षात्कारकर्ता इसमें एक पेच डालते हैं। सीमा पर छह लोगों का वेतन समान हो तो क्या होगा? बहुत-सी पंक्तियों का मान समान हो तो क्या होगा?
मुख्य समस्या नियतात्मकता की है: जब क्रमबद्ध करने वाली कुंजी के मान समान हों, तो LIMIT मनमाने ढंग से कटौती करता है और लौटाई गई सटीक पंक्तियाँ अलग-अलग बार बदल सकती हैं। यह पाठ Top-N को विश्वसनीय बनाता है।
ORDER BY + LIMIT अनियतात्मक क्यों हो सकते हैं
मान लीजिए कि रैंक 4, 5 और 6 वाले सभी वेतनों का मान 50000 है। ORDER BY salary DESC LIMIT 5 को ठीक 5 पंक्तियाँ लौटानी होंगी, इसलिए वह समान मान वाली तीन पंक्तियों में से दो रखेगा और एक हटा देगा, लेकिन कौन-सी दो रखी जाएँगी, यह अपरिभाषित है।
क्वेरी को दो बार चलाने पर या अनुकूलक द्वारा निष्पादन योजनाएँ बदलने के बाद आपको अलग-अलग लोग मिल सकते हैं। यही अनियतात्मकता वह त्रुटि है, जिसे साक्षात्कारकर्ता आपसे पहचानने की अपेक्षा करते हैं।
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;सुधार 1: एक अद्वितीय निर्णायक कुंजी जोड़ें
सबसे सरल सुधार है कि अंत में एक ऐसा स्तंभ जोड़कर क्रम को पूर्ण बनाया जाए, जो अद्वितीय हो—आमतौर पर प्राथमिक कुंजी। अब पूरी कुंजी पर कोई भी दो पंक्तियाँ समान नहीं होंगी, इसलिए कटौती नियतात्मक और दोहराने योग्य होगी।
इससे दिखाई देने वाले वेतन नहीं बदलते, लेकिन समान मान वाली पंक्तियों में चयन अलग-अलग बार स्थिर रहता है।
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 5;सुधार 2: WITH TIES के साथ सभी समान मान शामिल करें
कभी-कभी आवश्यकता होती है कि “सीमा पर समान मान वाले सभी लोगों को शामिल किया जाए”, न कि ठीक N पंक्तियाँ लौटाई जाएँ। मानक SQL और SQL सर्वर WITH TIES देते हैं, जो अंतिम पंक्ति के ORDER BY मान से मेल खाने वाली अतिरिक्त पंक्तियाँ लौटाता है।
यदि पाँचवें वेतन का मान तीन लोगों का समान है, तो यह 7 पंक्तियाँ लौटाता है। ध्यान दें कि WITH TIES के लिए ORDER BY आवश्यक है।
SELECT name, salary
FROM employees
ORDER BY salary DESC
FETCH FIRST 5 ROWS WITH TIES;पहले आवश्यकता स्पष्ट करें
कोड लिखने से पहले साक्षात्कारकर्ता से पूछें: “यदि सीमा पर मान समान हों, तो क्या आप ठीक N पंक्तियाँ चाहते हैं या समान मान वाली सभी पंक्तियाँ?” यह एक स्पष्टता वाला प्रश्न ही वरिष्ठ स्तर की समझ दर्शाता है।
- ठीक N, स्थिर परिणाम: एक अद्वितीय निर्णायक कुंजी जोड़ें।
- सभी समान मान शामिल:
WITH TIESयाRANKका उपयोग करें। - अलग-अलग मान:
DENSE_RANKका उपयोग करें।
पोर्टेबल विंडो-फ़ंक्शन तरीका
कई इंजन WITH TIES का समर्थन नहीं करते। सभी प्रणालियों में चलने वाला शक्तिशाली तरीका उप-क्वेरी या CTE में रैंकिंग विंडो फ़ंक्शन का उपयोग करता है और फिर रैंक के आधार पर फ़िल्टर लगाता है। ROW_NUMBER नियतात्मक क्रम कुंजी के साथ ठीक N पंक्तियाँ देता है।
आपको विंडो फ़ंक्शन को बाहरी क्वेरी में रखना पड़ता है, क्योंकि आप इसे सीधे WHERE में संदर्भित नहीं कर सकते।
SELECT name, salary
FROM (
SELECT name, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC, id ASC) AS rn
FROM employees
) ranked
WHERE rn <= 5;समान मान बनाए रखने के लिए RANK
जब आप सभी समान मान वाली पंक्तियाँ रखना चाहते हैं और क्रमांकन में अंतराल स्वीकार करते हैं, तो ROW_NUMBER की जगह RANK का उपयोग करें। यदि तीन पंक्तियाँ रैंक 4 पर समान हों, तो सभी को रैंक 4 मिलेगा और अगली रैंक 7 होगी।
rank <= 5 पर फ़िल्टर लगाने से शीर्ष पाँच वेतन स्थानों की हर पंक्ति लौटेगी, जिसमें समान मान वाली पंक्तियाँ भी शामिल होंगी।
SELECT name, salary
FROM (
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS rnk
FROM employees
) ranked
WHERE rnk <= 5;अलग-अलग Top-N मानों के लिए DENSE_RANK
“शीर्ष 3 वेतन स्तर” (शीर्ष 3 लोग नहीं) का अर्थ अलग-अलग मान हैं। DENSE_RANK समान मानों को एक ही रैंक देता है और संख्याएँ नहीं छोड़ता, इसलिए dense_rnk <= 3 उन सभी लोगों को लौटाता है, जिनका वेतन तीन सबसे अधिक अलग-अलग वेतनों में से कोई एक है।
कौन-सा वाक्यांश किस रैंकिंग फ़ंक्शन की माँग करता है, यह जानना आपकी समझ को अलग पहचान देता है।
SELECT name, salary
FROM (
SELECT name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS drnk
FROM employees
) ranked
WHERE drnk <= 3;शीर्ष-1 का विशेष मामला
एकमात्र शीर्ष पंक्ति के लिए ORDER BY ... LIMIT 1 काम करता है, लेकिन इसमें समान मानों का जोखिम बना रहता है। यदि आप अधिकतम मान वाली हर पंक्ति चाहते हैं, तो उसकी तुलना उप-क्वेरी के अधिकतम मान से करें या RANK() = 1 का उपयोग करें।
अधिकतम-उप-क्वेरी वाला रूप साफ़ है और किसी भी डायलेक्ट में चलता है।
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);तरीकों की तुलना
विश्वसनीय Top-N के लिए प्रत्येक उपकरण का उपयोग कब करें:
LIMIT+ अद्वितीय निर्णायक कुंजी: ठीक N पंक्तियाँ, स्थिर परिणाम, सबसे सरल।FETCH ... WITH TIES: ठीक N पंक्तियाँ और सीमा पर समान मान वाली पंक्तियाँ, मानक SQL।ROW_NUMBER: ठीक N पंक्तियाँ, नियतात्मक, सभी प्रणालियों में चलने वाला।RANK: समान मान वाली सभी पंक्तियों सहित शीर्ष N स्थान।DENSE_RANK: शीर्ष N अलग-अलग मान।
समूह-वार Top-N का पूर्वावलोकन
विंडो वाला तरीका बहुत सहजता से व्यापक बनाया जा सकता है। हर समूह के भीतर शीर्ष N पाने के लिए PARTITION BY जोड़ें, जैसे हर विभाग में सबसे अधिक कमाने वाले शीर्ष 2 लोग। विभाजन के बाद वही rn <= n फ़िल्टर लागू होता है।
समूह-वार Top-N वास्तविक साक्षात्कारों में सबसे अधिक पूछी जाने वाली समस्याओं में से एक है और यह ठीक उसी तरीके पर आधारित है, जिसे आपने अभी सीखा है।
SELECT department, name, salary
FROM (
SELECT department, name, salary,
ROW_NUMBER() OVER (PARTITION BY department
ORDER BY salary DESC, id ASC) AS rn
FROM employees
) ranked
WHERE rn <= 2;त्वरित जाँच
आवश्यकता का सही फ़ंक्शन से मिलान करें।
पुनरावलोकन
Top-N को विश्वसनीय रूप से लौटाने के लिए:
- क्रमबद्ध करने वाली कुंजी के मान समान होने पर केवल
ORDER BY ... LIMITअनियतात्मक होता है। - स्थिर, ठीक-N परिणामों के लिए अद्वितीय निर्णायक कुंजी जोड़ें।
- सीमा पर समान मान वाली पंक्तियाँ बनाए रखने के लिए
WITH TIESयाRANKका उपयोग करें। - शीर्ष-N अलग-अलग मानों के लिए
DENSE_RANKका उपयोग करें। - हमेशा स्पष्ट करें कि साक्षात्कारकर्ता ठीक N पंक्तियाँ चाहता है या समान मान वाली सभी पंक्तियाँ।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “विश्वसनीय रूप से शीर्ष-N ROW लौटाना” पाठ निःशुल्क है?
हाँ—“विश्वसनीय रूप से शीर्ष-N ROW लौटाना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“विश्वसनीय रूप से शीर्ष-N ROW लौटाना” में मैं क्या सीखूँगा?
जानें कि टाई-ब्रेकर के बिना ORDER BY और LIMIT अनिश्चित परिणाम क्यों दे सकते हैं आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“विश्वसनीय रूप से शीर्ष-N ROW लौटाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- कई COLUMN की क्रम-सज्जा और NULL का स्थान
- LIMIT, OFFSET और FETCH FIRST
- विश्वसनीय रूप से शीर्ष-N ROW लौटाना
- अभिव्यक्तियों और उपनामों से क्रमित करना