Mysql 独特用户排名

Mysql 独特用户排名,mysql,sql,Mysql,Sql,如果我有三列: id、用户名、时间 我的数据是: +-------+------------------+-------------+ | id | username | time | +-------+------------------+-------------+ | 1 | A | 1 min | | 2 | A | 2 min | | 3 |

如果我有三列:

id、用户名、时间

我的数据是:

+-------+------------------+-------------+
|   id  |     username     |    time     |
+-------+------------------+-------------+
|   1   |        A         |    1 min    |
|   2   |        A         |    2 min    |
|   3   |        B         |    3 min    |
|   4   |        B         |    4 min    |
+-------+------------------+-------------+
此查询用于获取排名:

   SELECT time, 
    FIND_IN_SET(MIN(time), (SELECT GROUP_CONCAT(time ORDER BY time ASC) 
    FROM table t1)) AS rank
    FROM table t2
    WHERE t2.username = 'B';
只有一个问题:它为用户B返回排名3de,而不是排名第二

所以我尝试使用GROUP BY t2.username和Distinct t2.username,但没有成功

如何获得用户B的排名?它应该是2而不是3,因为我们只有2个用户。

例如:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id  INT NOT NULL
,username CHAR(1) NOT NULL
,time TIME NOT NULL
);

INSERT INTO my_table VALUES
(1,'A','00:01:00'),
(2,'A','00:02:00'),
(3,'B','00:03:00'),
(4,'B','00:04:00');

SELECT * FROM my_table;
+----+----------+----------+
| id | username | time     |
+----+----------+----------+
|  1 | A        | 00:01:00 |
|  2 | A        | 00:02:00 |
|  3 | B        | 00:03:00 |
|  4 | B        | 00:04:00 |
+----+----------+----------+

SELECT * 
  FROM 
     ( SELECT username
            , time
            , @i:=@i+1 rank 
         FROM 
            ( SELECT username
                   , MIN(time) time 
                FROM my_table 
               GROUP 
                  BY username
            ) x
            , (SELECT @i:=0) vars 
        ORDER 
           BY time
     ) n 
 WHERE username = 'B';
+----------+----------+------+
| username | time     | rank |
+----------+----------+------+
| B        | 00:03:00 |    2 |
+----------+----------+------+
我想这也行,但有点粗糙,所以我不确定

SELECT x.*
     , FIND_IN_SET(time,(SELECT GROUP_CONCAT(DISTINCT time ORDER BY time) FROM (SELECT MIN(time) time FROM my_table GROUP BY username) j )) rank
  FROM my_table x HAVING rank <> 0 AND username = 'B';

MIN对字符串不起作用,您需要强制转换它。@FunkFortyner MIN对字符串起作用,它的作用就像是ASC limit 1下的订单一样,$order的值是多少_by@JorgeCampos好啊嗯,我在这里看到了它,我引用:MIN函数在某些情况下非常有用,比如找到最小的数。。。不要提及字符串,也不知道为什么与官方引用$user_name相比,它同样毫无意义。摆脱所有的PHP。这与这个问题无关