2013-01-14 17 views
14

में एनएच प्रतिशत गणना की गणना मैं postgresql के लिए एक nth प्रतिशतile फ़ंक्शन खोजने में आश्चर्यजनक रूप से असमर्थ रहा हूं।postgresql

मैं इसका उपयोग मॉन्ड्रियन ओलाप टूल के माध्यम से कर रहा हूं, इसलिए मुझे केवल एक समग्र कार्य की आवश्यकता है जो 95 वां प्रतिशत लौटाता है।

मैं इस लिंक मिला:

http://www.postgresql.org/message-id/[email protected]

लेकिन उस प्रतिशतक समारोह में कोड कुछ क्वेरी के साथ कुछ मामलों में nulls लौटा रहा है किसी कारण से। मैंने डेटा की जांच की है और उस डेटा में कुछ भी अजीब बात नहीं है जो ऐसा प्रतीत होता है!

+1

क्या आपने 'cent_rank()', 'cume_dist()' या 'ntile()' की कोशिश की है? विवरण [यहां] (http://www.postgresql.org/docs/current/static/functions-window.html)। –

+2

इसे भी देखें: http: // stackoverflow।कॉम/ए/1430 9 370/330315 –

+0

आह, मैंने पाया कि अन्य स्टैक ओवरफ़्लो एंट्री, लेकिन सरणी सॉर्ट फ़ंक्शन नहीं बनाया था। यह अब काम करता है। तो यह सवाल बंद या हटाया जा सकता है। – Codek

उत्तर

1

उपरोक्त टिप्पणियों के रूप में, समाधान यहां है, बस सरणी सॉर्ट और centile_cont दोनों कार्यों को जोड़ना सुनिश्चित करें!

https://stackoverflow.com/a/14309370/330315

13

ntile समारोह यहां बहुत उपयोगी है।

select * from test_temp 

score 
integer 
3 
5 
2 
10 
4 
8 
7 
12 

select score, ntile(4) over (order by score) as quartile from temp_test; 

score quartile 
integer integer 
2  1 
3  1 
4  2 
5  2 
7  3 
8  3 
10  4 
12  4 

ntile(4) over (order by score), स्कोर से स्तंभों का आदेश देता है चार भी समूहों में यह विभाजन (संख्या समान रूप से विभाजित करता है) और प्रदान करती समूह आदेश के आधार पर नंबर: मैं एक मेज test_temp है।

चूंकि मेरे पास 8 संख्याएं हैं, इसलिए वे 0 वें, 12.5 वें, 25 वें, 37.5 वें, 50 वें, 62.5 वें, 75 वें और 87.5 वें प्रतिशत का प्रतिनिधित्व करते हैं। तो अगर मैं केवल उन परिणामों को लेता हूं जहां quartile 2 है, तो मेरे पास 25 वें और 37.5 प्रतिशत प्रतिशत होंगे।

with ranked_test as (
    select score, ntile(4) over (order by score) as quartile from temp_test 
) 
select min(score) from ranked_test 
where quartile = 2 
group by quartile; 

रिटर्न 4, 8.

यदि आप एक बड़ी मेज था और ntile(100) इस्तेमाल किया स्तंभ पर आप फ़िल्टर प्रतिशतक होगा, और आप एक ही क्वेरी इस्तेमाल कर सकते हैं की सूची में तीसरा सबसे बड़ी संख्या ऊपरोक्त अनुसार।

20

PostgreSQL 9.4 के साथ वहाँ अब प्रतिशतक के लिए देशी समर्थन है, आदेश दिया-सेट सकल कार्य में लागू:

percentile_cont(fraction) WITHIN GROUP (ORDER BY sort_expression) 

निरंतर प्रतिशतक: आदेश में विनिर्दिष्ट अंश के लिए इसी एक मान देता है, आसन्न इनपुट आइटम के बीच interpolating अगर जरूरत

percentile_cont(fractions) WITHIN GROUP (ORDER BY sort_expression) 

mult निरंतर प्रतिशतक iple: प्रत्येक गैर-शून्य तत्व कि प्रतिशतक

करने के लिए इसी मान से बदल के साथ मिलान अंशों पैरामीटर के आकार परिणाम की एक सरणी देता है, अधिक जानकारी के लिए दस्तावेज़ देखें: http://www.postgresql.org/docs/current/static/functions-aggregate.html

और यहां कुछ उदाहरणों के लिए देखें: https://github.com/michaelpq/michaelpq.github.io/blob/master/_posts/2014-02-27-postgres-9-4-feature-highlight-within-group.markdown

+1

प्रलेखन में कोई उदाहरण नहीं है। क्या आप कुछ सरल उदाहरणों के साथ अपना उत्तर अपडेट करना चाहते हैं? यह अजीब है लेकिन गूगलिंग ने केवल कुछ जटिल उदाहरण दिए हैं। – tinkerr