SQL सर्वर में, NTILE()
फ़ंक्शन आपको क्रमबद्ध विभाजन में पंक्तियों को निर्दिष्ट संख्या में समूहों में वितरित करने की अनुमति देता है। समूहों की संख्या 1 से शुरू होती है। प्रत्येक पंक्ति के लिए, NTILE()
उस समूह की संख्या लौटाता है जिससे पंक्ति संबंधित है।
फ़ंक्शन को कॉल करते समय आप बस अपने इच्छित समूहों की संख्या प्रदान करते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
NTILE (integer_expression) OVER ( [] < order_by_clause > )
पूर्णांक_अभिव्यक्ति एक धनात्मक पूर्णांक व्यंजक है जो उन समूहों की संख्या निर्दिष्ट करता है जिनमें प्रत्येक विभाजन को विभाजित किया जाना चाहिए। यह int . प्रकार का हो सकता है , या बिगिंट .
FROM
. द्वारा निर्मित परिणाम सेट को विभाजित करता है विभाजन में खंड जिस पर फ़ंक्शन लागू होता है।
NTILE()
मानों को विभाजन में पंक्तियों को सौंपा गया है। जब
उदाहरण 1 - मूल उपयोग
यह फ़ंक्शन कैसे काम करता है, इसका एक बुनियादी उदाहरण यहां दिया गया है:
SELECT Player, Score, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE' FROM Scoreboard;
परिणाम:
+----------+---------+---------+ | Player | Score | NTILE | |----------+---------+---------| | Bart | 2010 | 1 | | Burns | 1270 | 1 | | Meg | 1030 | 2 | | Marge | 990 | 2 | | Lisa | 710 | 3 | | Ned | 666 | 3 | | Apu | 350 | 4 | | Homer | 1 | 4 | +----------+---------+---------+
इस मामले में 8 परिणाम और मेरे द्वारा NTILE()
. को प्रदान किया गया मान है 4 है, इसलिए मान समान रूप से 4 समूहों में फैले हुए हैं।
उदाहरण 2 - NTILE मान बदलें
अगर मैं NTILE()
को बदल दूं तो क्या होगा मान से 3.
SELECT Player, Score, NTILE(3) OVER (ORDER BY Score DESC) 'NTILE' FROM Scoreboard;
परिणाम:
+----------+---------+---------+ | Player | Score | NTILE | |----------+---------+---------| | Bart | 2010 | 1 | | Burns | 1270 | 1 | | Meg | 1030 | 1 | | Marge | 990 | 2 | | Lisa | 710 | 2 | | Ned | 666 | 2 | | Apu | 350 | 3 | | Homer | 1 | 3 | +----------+---------+---------+
परिणाम 3 समूहों में वितरित किए जाते हैं। जैसा कि आप उम्मीद कर सकते हैं, अंतिम समूह केवल 2 पंक्तियों के साथ समाप्त होता है (अन्य समूहों के लिए 3 की तुलना में)।
उदाहरण 3 - ऑर्डरिंग स्विच करें
आरोही और अवरोही के बीच क्रम को बदलने से आमतौर पर NTILE()
. का परिणाम होगा अलग-अलग पंक्तियों में मान लागू किए जा रहे हैं।
SELECT Player, Score, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(4) OVER (ORDER BY Score ASC) 'NTILE Ascending' FROM Scoreboard ORDER BY Score DESC;
परिणाम:
+----------+---------+--------------------+-------------------+ | Player | Score | NTILE Descending | NTILE Ascending | |----------+---------+--------------------+-------------------| | Bart | 2010 | 1 | 4 | | Burns | 1270 | 1 | 4 | | Meg | 1030 | 2 | 3 | | Marge | 990 | 2 | 3 | | Lisa | 710 | 3 | 2 | | Ned | 666 | 3 | 2 | | Apu | 350 | 4 | 1 | | Homer | 1 | 4 | 1 | +----------+---------+--------------------+-------------------+
हालांकि, यह इस बात पर निर्भर करेगा कि परिणाम सेट बनाम एनटीआईएलई की संख्या में कितनी पंक्तियां हैं। जाहिर है, अगर NTILE()
मान 1 है, तो कोई अंतर नहीं होगा।
SELECT Player, Score, NTILE(1) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(1) OVER (ORDER BY Score ASC) 'NTILE Ascending' FROM Scoreboard ORDER BY Score DESC;
परिणाम:
+----------+---------+--------------------+-------------------+ | Player | Score | NTILE Descending | NTILE Ascending | |----------+---------+--------------------+-------------------| | Bart | 2010 | 1 | 1 | | Burns | 1270 | 1 | 1 | | Meg | 1030 | 1 | 1 | | Marge | 990 | 1 | 1 | | Lisa | 710 | 1 | 1 | | Ned | 666 | 1 | 1 | | Apu | 350 | 1 | 1 | | Homer | 1 | 1 | 1 | +----------+---------+--------------------+-------------------+
वही होगा यदि परिणाम सेट में केवल एक पंक्ति हो, चाहे NTILE()
. की परवाह किए बिना मूल्य:
SELECT Player, Score, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(4) OVER (ORDER BY Score ASC) 'NTILE Ascending' FROM Scoreboard WHERE Score > 2000 ORDER BY Score DESC;
परिणाम:
+----------+---------+--------------------+-------------------+ | Player | Score | NTILE Descending | NTILE Ascending | |----------+---------+--------------------+-------------------| | Bart | 2010 | 1 | 1 | +----------+---------+--------------------+-------------------+
उदाहरण 4 - विभाजन
आप PARTITION BY
. का उपयोग कर सकते हैं परिणामों को विभाजन में विभाजित करने के लिए खंड। जब आप ऐसा करते हैं, NTILE()
प्रत्येक विभाजन के विरुद्ध लागू किया जाता है।
उदाहरण:
SELECT TeamName, Player, Score, NTILE(2) OVER (PARTITION BY TeamName ORDER BY Score ASC) 'NTILE' FROM Scoreboard s INNER JOIN Team t ON t.TeamId = s.TeamId;
परिणाम:
+------------+----------+---------+-------------------+ | TeamName | Player | Score | NTILE | |------------+----------+---------+-------------------| | Mongrels | Apu | 350 | 1 | | Mongrels | Ned | 666 | 1 | | Mongrels | Meg | 1030 | 2 | | Mongrels | Burns | 1270 | 2 | | Simpsons | Homer | 1 | 1 | | Simpsons | Lisa | 710 | 1 | | Simpsons | Marge | 990 | 2 | | Simpsons | Bart | 2010 | 2 | +------------+----------+---------+-------------------+