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

MySQL में पर्सेंटाइल रैंक की गणना

यहां एक अलग दृष्टिकोण है जिसमें शामिल होने की आवश्यकता नहीं है। मेरे मामले में (15,000+ वाली एक तालिका) पंक्तियों में, यह लगभग 3 सेकंड में चलता है। (जॉइन विधि अधिक परिमाण का क्रम लेती है)।

नमूने में, मान लें कि माप वह कॉलम है जिस पर आप प्रतिशत रैंक की गणना कर रहे हैं, और id केवल एक पंक्ति पहचानकर्ता है (आवश्यक नहीं):

SELECT
    id,
    @prev := @curr as prev,
    @curr := measure as curr,
    @rank := IF(@prev > @curr, @[email protected], @rank) AS rank,
    @ties := IF(@prev = @curr, @ties+1, 1) AS ties,
    ([email protected]/@total) as percentrank
FROM
    mytable,
    (SELECT
        @curr := null,
        @prev := null,
        @rank := 0,
        @ties := 1,
        @total := count(*) from mytable where measure is not null
    ) b
WHERE
    measure is not null
ORDER BY
    measure DESC

इस तरीके का श्रेय श्लोमी नोच को जाता है। वह इसके बारे में यहाँ विस्तार से लिखते हैं:

http://code.openark.org/blog/mysql /sql-रैंकिंग-बिना-सेल्फ-जॉइन

मैंने इसे MySQL में परीक्षण किया है और यह बहुत अच्छा काम करता है; Oracle, SQLServer, आदि के बारे में कोई जानकारी नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोष्ठक में संख्या का वास्तव में क्या अर्थ है?

  2. कई-से-अनेक क्वेरी कैसे करें?

  3. किसी फाइलसॉर्ट से बचने का कोई तरीका जब ऑर्डर क्लॉज से अलग होता है?

  4. लोड हो रहा है क्लास `com.mysql.jdbc.Driver'। यह बहिष्कृत है। नया ड्राइवर वर्ग `com.mysql.cj.jdbc.Driver' है

  5. इको MYSQL परिणाम प्रदर्शन खाली पृष्ठ