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

MySQL - स्कोर तालिका में उपयोगकर्ताओं के लिए रैंक चुनें

हालांकि मुझे यकीन नहीं है कि इस संदर्भ में "समस्याग्रस्त" का क्या अर्थ है, यहां एक सादे LEFT JOIN के रूप में फिर से लिखी गई क्वेरी है अंत में रैंकिंग प्राप्त करने के लिए एक सबक्वायरी के साथ (ORDER BY रैंकिंग से पहले किए जाने की जरूरत है);

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

परीक्षण के लिए एक SQLfiddle

संपादित करें:group_id को ध्यान में रखने के लिए, आपको क्वेरी को कुछ हद तक विस्तारित करना होगा;

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.group_id = u2.group_id       -- u and u2 have the same group
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
    AND u.group_id = 1                -- ...and that group is group 1
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

एक और SQLfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql समान मान वाली पंक्तियों को कैसे क्रमित करता है?

  2. PHP का उपयोग करके MySQL डेटाबेस निर्यात करें

  3. MySQL में अंतिम हटाई गई आईडी प्राप्त करें

  4. Mysql अगली और पिछली पंक्ति का चयन करें आईडी द्वारा क्रम नहीं:

  5. क्या INNODB MySQL में डिफ़ॉल्ट रूप से सक्षम है?