ग्राहक द्वारा 10 वाँ और 90 वाँ प्रतिशत प्राप्त करें


13

मेरे पास एक तालिका है जिसमें ग्राहक और स्कोर शामिल हैं (विभिन्न कारकों के आधार पर, इस मामले में अप्रासंगिक; एक ग्राहक के कई स्कोर हो सकते हैं), जो इस तरह दिखता है:

customer_id | score | score_giver_id
====================================
          1 | 100   | 1
          1 | 102   | 1
          1 | 101   | 1
          1 | 140   | 1
          2 | 131   | 3
          1 | 44    | 1
          3 | 223   | 1
          3 | 1     | 2
          3 | 201   | 1
          3 | 211   | 1
          3 | 231   | 1
          3 | 243   | 1

score_giver_idअप्रासंगिक है, लेकिन मैं अभी भी यह लाने के लिए करना चाहते हैं।

ऊपर दिए गए उदाहरण में, जब customer_id द्वारा समूहीकृत 50 वाँ प्रतिशताइल प्राप्त किया जाता है, तो परिणाम होना चाहिए (मैंने इस उदाहरण में 50 वाँ प्रतिशत उठाया है, क्योंकि यह दिखाता है कि मैं क्या करना चाहता हूँ):

customer_id | score | score_giver_id
====================================
          1 | 101   | 1
          2 | 131   | 3
          3 | 223   | 1

मैंने यहाँ वर्णित विधि का उपयोग किया ।

मुझे उस मूल्य को प्राप्त करने की आवश्यकता है जो क्रमशः 10 वें प्रतिशताइल में है, पोस्टग्रेएसक्यूएल में 90 वें प्रतिशत पर। मैंने देखा है कि 9.4 के बाद से एक ntileसमारोह है, लेकिन मैं वास्तव में यह नहीं समझता कि यह कैसे काम करता है, यह क्या करता है, और अगर यह मेरी मदद करता है।

मुझे MySQL के लिए एक अच्छा स्निपेट मिला है, जो काम करता है (भले ही कुछ कैविएट हैं), लेकिन मैं बिल्ट-इन फ़ंक्शन का उपयोग करना चाहूंगा यदि उपलब्ध हो (MySQL के लिए कोई नहीं है, इसलिए स्निपेट है)।

जवाबों:


22

ऐसा लगता है कि आप percentile_disc()निर्धारित-समुच्चय समारोह के बाद हैं।

प्रलेखन इसके बारे में निम्नलिखित का कहना है:

percentile_disc(fraction) WITHIN GROUP (ORDER BY sort_expression)

असतत प्रतिशतक: पहला इनपुट मान लौटाता है जिसका क्रम क्रम में होता है या निर्दिष्ट अंश से अधिक होता है

वाक्यविन्यास एक समुच्चय के लिए थोड़ा अजीब है, लेकिन इसका उपयोग करना आसान है:

SELECT percentile_disc(0.9) WITHIN GROUP (ORDER BY score)
  FROM customer_score
 GROUP BY customer_id;

आप उस कॉलम को परिभाषित करते हैं जिसमें से ORDER BYक्लॉज़ में पर्सेंटाइल लेना है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.