यहां एक अलग दृष्टिकोण है जिसमें शामिल होने की आवश्यकता नहीं है। मेरे मामले में (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, आदि के बारे में कोई जानकारी नहीं है।