简体   繁体   中英

MySQL Advanced Ranks Query

I have a table that looks like this:

map         uid     time    name
'first'     1       5.0     'Jon'
'first'     3       4.9     'Robin'
'second'    1       2.0     'Jon'
'first'     2       5.3     'Max'
'second'    3       2.1     'Robin'

I am currently selecting the values using this:

SELECT records.* FROM `records` WHERE `uid` = '3' ORDER BY `records`.`time` ASC 

Now obviously, I have multiple uids for different maps. How would I find the rank of every user out of total ranks? I know I can find total ranks of the map by using COUNT(DISTINCT map) . However, I am having issues selecting a specific user and their rank in the map. Any help would be appreciated!

EDIT: Desired output when selecting uid 3 is as follows:

map         uid     time    name        position    totalposition (totalposition would be COUNT(DISTINCT map))
'first'     3       4.9     'Robin'     2           3
'second'    3       2.1     'Robin'     2           2

Use the following query : -

mysql> set @pos = 0; select records.*, @pos:=@pos+1 as position from records order by time desc;

Output :

+--------+------+------+-------+--------------+
| map    | uid  | time | name  | position     |
+--------+------+------+-------+--------------+
| first  |    2 | 5.30 | Max   |            1 |
| first  |    1 | 5.00 | jon   |            2 |
| first  |    3 | 4.90 | Robin |            3 |
| second |    3 | 2.10 | Robin |            4 |
| second |    1 | 2.00 | Jon   |            5 |
+--------+------+------+-------+--------------+

And now, to recieve position of a particular :

mysql> set @pos = 0; select * from (select records.*, @pos:=@pos+1 as position
mysql> from records order by time desc) as t where uid = 3;

Output :

+--------+------+------+-------+----------+
| map    | uid  | time | name  | position |
+--------+------+------+-------+----------+
| first  |    3 | 4.90 | Robin |        3 |
| second |    3 | 2.10 | Robin |        4 |
+--------+------+------+-------+----------+

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM