2013-01-16 12 views
32

पर और जानना चाहते हैं मैं एमएस एसक्यूएल के लिए रैंकिंग फ़ंक्शन पर पढ़ रहा था। मैं एनटीआईएलई() को छोड़कर अन्य कार्यों को समझता हूं।एनटीआईएलई()

StudentID  MARKS 
     S1   75 
     S2   83 
     S3   91 
     S4   83 
     S5   93 

तो अगर मैं एक NTILE(2) OVER(ORDER BY MARKS desc) क्या परिणाम और क्यों हो जाएगा कार्य करें: अगर मैं इस डेटा है का कहना है की सुविधा देता है?
और यदि यह NTILE(3) है तो क्या होगा? सरल व्याख्या किसी को भी?

+0

में निर्दिष्ट संख्या तक आप एक बड़े सेट पर एनटीआईएलई कर रहे हैं, तो आप Median के लिए प्रॉक्सी के रूप में ऊपरी ntile (या निचले अधिकतम) के न्यूनतम मूल्य का उपयोग कर सकते हैं। यह बहुत सारी पंक्तियों पर औसत चलाने से कम महंगा हो सकता है। – ouonomos

उत्तर

34

इसके बारे में Think दे देंगे, NTILE (2) 2 बाल्टी कर देगा, आधा पंक्तियों मान 1 और दूसरे आधे मूल्य होगा 2

उदाहरण

create table #temp(StudentID char(2), Marks int) 
insert #temp values('S1',75) 
insert #temp values('S2',83) 
insert #temp values('S3',91) 
insert #temp values('S4',83) 
insert #temp values('S5',93) 


select NTILE(2) over(order by Marks),* 
from #temp 
order by Marks 

यहाँ, उत्पादन होता है के बाद से आप पंक्तियों की एक असमान संख्या है, बाल्टी 1 1 पंक्ति अधिक

1 S1 75 
1 S2 83 
1 S4 83 
2 S3 91 
2 S5 93 

आप एक और पंक्ति जोड़ देते हैं तो

insert #temp values('S6',92) 

अब दोनों बाल्टी 3 पंक्तियों होगा

1 S1 75 
1 S2 83 
1 S4 83 
2 S3 91 
2 S6 92 
2 S5 93 

हकीकत में मैं उत्पादन कोड में NTILE इस्तेमाल कभी नहीं किया है, लेकिन जहां बाल्टी के एन संख्या में परिणाम विभाजित करने की आवश्यकता मैं उपयोग देख सकते हैं

+0

समझा, धन्यवाद! समानता के साथ आपकी व्याख्या मदद करता है – 10e5x

16

यह आंकड़ों के अवरोही क्रम में डेटा व्यवस्थित करेगा और फिर इसे 2 समूहों में विभाजित करेगा।

यदि डेटा को समान समूहों में विभाजित नहीं किया जा सकता है, तो पहले कुछ समूहों के बाद वाले समूहों की तुलना में अधिक पंक्तियां होंगी।

तो NTILE (2) आप

StudentID  MARKS  NTILE 
     S5   93   1 
     S3   91   1 
     S2   83   1 
     S4   83   2 
     S1   75   2 

इसी NTILE दे देंगे (3) आप बाल्टी के रूप में

StudentID  MARKS  NTILE 
     S5   93   1 
     S3   91   1 
     S2   83   2 
     S4   83   2 
     S1   75   3 
+0

धन्यवाद, आपका उत्तर मुझे समझने में मदद करता है! – 10e5x

5

मैं 10/10 सूची के लिए ईमेल सूचियों को बाल्टी में विभाजित करने के लिए अक्सर एनटीआईएलई का उपयोग करता हूं। उदाहरण के लिए, हम एक ईमेल की एक विषय पंक्ति का परीक्षण कर रहे हैं, और प्रत्येक विकल्प में से प्रत्येक को 10% में से एक को भेजना चाहते हैं, जिसमें शेष 80% को बेहतर तरीके से भेजा जा रहा है।

का चयन करें [क्षेत्र सूची], (NTILE (10) से अधिक (द्वारा newid()) क्रम) - 1 सेगमेंट के रूप में से [डेटा]

एक यादृच्छिक क्रम सुनिश्चित करता है "आदेश newid() द्वारा"। "[एनटीआईएलई ...] - 1" वाक्यविन्यास कुछ अन्य औजारों का सीधा परिणाम है जो हम पूर्णांक गणित के बजाय टेक्स्ट पार्सिंग करने का उपयोग करते हैं, इसलिए परिणाम 1-10 के बजाय 0-9 से चलाना आसान था । सेगमेंट फ़ील्ड को 0-9 से मूल्य के साथ पॉप्युलेट किया जाएगा जिसका उपयोग मैं 10% रिकॉर्ड्स को आसानी से अलग करने के लिए कर सकता हूं, और कई बार अभियानों के लिए कई प्रयासों के लिए।

आप अनुकरणीय परिणामों के साथ एक प्रश्न की जरूरत है, तो आप खंड द्वारा आदेश के लिए उपयोग करने के लिए खंड "द्वारा आदेश" कुछ में नियतात्मक का उपयोग करें, या एक स्तंभ जोड़ने के लिए एक GUID के साथ की आवश्यकता होगी।

खंड द्वारा भाग राज्य, या पेशे, या कुछ अन्य पूर्व निर्धारित समूह के आधार पर बाल्टी के समूह बनाने के लिए उपयोग किया जाएगा, यानी एनटीआईएलई (10) ओवर (न्यूडर() द्वारा राज्य आदेश द्वारा विभाजित) या कुछ ऐसे।मेरा मानना ​​है कि धारा द्वारा ऑर्डर आवश्यक है - पक्ष द्वारा वैकल्पिक है।

0

एनटीइल फ़ंक्शन में पहले यह पंक्तियों की संख्या को गिनती है और इसे एनटीइल में पारित पैरामीटर द्वारा विभाजित करता है और फिर पंक्तियों के बराबर समूह को मात्रा के अनुसार बनाते हैं और उन्हें रैंक करते हैं और फिर पंक्तियों को प्रत्येक समूह द्वारा शीर्ष पर वितरित किया जाएगा एक स्थानांतरण तरीके से और इसे कम से कम पंक्तियों से नहीं लेगा, उदाहरण के लिए यदि समूह 1 में 4 पंक्तियां हैं तो यह अपने समूह में अंतिम पंक्ति में 5 वां पंक्ति नहीं लेगी।

धन्यवाद

0

ntile विभाजन खंड का उपयोग किए बिना, बस डाटासेट ntile (संख्या) में संख्या के आधार पर ऐसा है कि विभाजित: अगर पंक्तियों की कोई 7, उदाहरण हैं: 1,1,1,2,3 , 4,5 एनटीइल (3) 3,2,2 दे देंगे। मुझे 3,2,2 कैसे मिले? सबसे पहले 7 के रूप में 7 (इसे कम करने के लिए एक कम) मान लें, 6/3 2,2,2 देता है, फिर + जोड़ें! पहले विभाजन के लिए। यदि पंक्तियों की संख्या भी तब तक कोई समस्या नहीं है। बस डेटासेट

विभाजन खंड का उपयोग करके एनटीइल, डेटासेट में मानों के आधार पर डेटासेट को विभाजित करें, जैसे: यदि पंक्तियों में से कोई भी 7 नहीं है, उदाहरण पंक्ति मान हैं: 1,1,1,2,3,4, 5 तब: मूल्य से विभाजित एनटीइल (3) दे देंगे: 1,2,3,1,1,1,1। मुझे यह कैसे मिला? सबसे पहले मानों के आधार पर डेटासेट को तोड़ें: यहां, 1,1,1 एक अंश है, अगले सभी मान एक अलग विभाजन बनाते हैं। फिर प्रत्येक विभाजन में ntile रैंक असाइन करना शुरू करें। यहां, 1,1,1 1,2,3 बन जाएंगे, फिर अगले विभाजन के साथ जारी रहेंगे, आप रैंक को तब तक खींच सकते हैं जब तक कि ntile() फ़ंक्शन

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^