المتصدرين برتبة - MySQL

2

لدي طاولة مثل هذا

+-----+-------+
| pid | score | 
+-----+-------+      
|   1 |    120|          
|   2 |    130|    
|   3 |    100|    
|   1 |    120|        
|   2 |    130|    
|   3 |    100|      
+-----+-------+

أحاول الحصول على ترتيب المستخدمين. حاليا أستخدم هذا الاستعلام ،

SELECT pid
     , SUM(score) AS total_score
  FROM score 
 GROUP 
    BY pid 
 ORDER 
    BY total_score DESC

أحصل على قائمة مرتبة حسب النتيجة مع هذا الاستعلام ولكن لا أحصل على موقعهم. أريد شيئا من هذا القبيل

+-----+-------+------+
| pid | score | rank |
+-----+-------+------+       
|   2 |    260|    1 |       
|   1 |    240|    2 |
|   3 |    200|    3 |       
+-----+-------+------+

وهل يمكنني الحصول على هذا المنصب لمستخدم معين؟ مثل

+-----+-------+------+
| pid | score | rank |
+-----+-------+------+       
|   1 |    240|    2 |        
+-----+-------+------+

أنا أستخدم MySQL 5.7.21. يمكنك الرجاء المساعدة؟

2 الاجابة

3
افضل جواب

إذا كانت لديك فرصة لتكون في Mysql 8.0.2 أو أكثر ، فلديك رتبة وظيفة.

آخر يمكنك استخدام متغير لتعيين الترتيب:

SELECT pid,
       total_score,
       @curRank := @curRank + 1 AS rank
FROM
    (SELECT pid,
            sum(score) AS total_score
     FROM score
     GROUP BY pid
     ORDER BY total_score DESC) datas, (SELECT @curRank := 0) r

يمكنك التصفية بعد الحصول على النتيجة فقط للغطاء الذي تريده

:مؤلف
0

نعم ، يمكنك استخدام LIMIT مثل:

SELECT pid, SUM(score) AS total_score 
FROM score 
GROUP BY pid 
ORDER BY total_score DESC 
LIMIT 1
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام