आप सही रास्ते पर थे। बस मामूली बदलाव करने की जरूरत है। निम्नलिखित क्वेरी आपको वांछित परिणाम देगी। आंतरिक क्वेरी में पहले 4 कॉलम मिले और रैंक क्रॉस प्राप्त करने के लिए उसमें शामिल हो गए (SELECT @curRank := 0) r
जो रैंक प्राप्त करने के लिए MySQL ट्रिक है। अंत में बस इसे काम करने के लिए Cnt द्वारा ऑर्डर करने की आवश्यकता है।
SELECT username
,userid
,category
,Cnt
,@curRank := @curRank + 1 AS rank
FROM (
SELECT b.Username
,B.userid
,A.category
,count(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
)a
,(SELECT @curRank := 0) r
Order by cnt desc
इसे देखने के लिए आप @Gordon-Linoff द्वारा वर्णित हैक का उपयोग कर सकते हैं। इस प्रश्न में
एंड कोड कुछ इस तरह दिखेगा।
CREATE VIEW TestView1
AS
SELECT b.Username
,B.userid
,A.category
,COUNT(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
ORDER BY cnt DESC;
CREATE VIEW TestView2
AS
SELECT t1.*
,( SELECT 1 + COUNT(*)
FROM TestView1 AS t2
WHERE t2.Cnt > t1.Cnt
OR (
t2.Cnt = t1.Cnt
AND t2.userid < t1.userid ) ) AS Rank
FROM TestView1 AS t1
TestView1
आपके द्वारा परिभाषित पहले 4 कॉलम प्राप्त करने के लिए उपयोग किया जाता है। TestView2
आप पहले दृश्य से सब कुछ चुनते हैं और कॉलम जोड़ने के बजाय यह देखने के लिए जांचते हैं कि आपके द्वारा चुना गया मान उस दृश्य के पहले उदाहरण में मूल्य से बड़ा या छोटा है या नहीं।