Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में NTILE () कैसे काम करता है

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                 |
+------------+----------+---------+-------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर तुलना ऑपरेटरों की सूची

  2. किसी SQL से बेस डेटा प्रकार लौटाएं_SQL सर्वर में भिन्न मान

  3. यह पता लगाने के लिए OBJECTPROPERTY() का उपयोग करें कि क्या कोई ऑब्जेक्ट SQL सर्वर में एक जाँच बाधा है

  4. SQL सर्वर 2019 में ट्रिगर इवेंट प्रकारों की श्रेणीबद्ध सूची

  5. कौन अधिक प्रदर्शनकारी हैं, सीटीई या अस्थायी टेबल?