猿问

使用MySQL,如何生成包含表中记录索引的列?

使用MySQL,如何生成包含表中记录索引的列?

有什么方法可以从查询中获得实际的行号吗?

我希望能够通过一个名为Score的字段订购一个名为联赛_女孩的表,并返回用户名和该用户名的实际行位置。

我想对用户进行排名,这样我就可以知道特定用户在哪里了。乔在200人中排在第100位。

User Score RowJoe  100    1Bob  50     2Bill 10     3

我在这里看到了一些解决方案,但我已经尝试了其中的大多数,但没有一个真正返回行号。

我试过这样做:

SELECT position, username, scoreFROM (SELECT @row := @row + 1 AS position, username, score 
       FROM league_girl GROUP BY username ORDER BY score DESC)

导出

.但它似乎没有返回行的位置.

有什么想法吗?


RISEBY
浏览 701回答 3
3回答

慕丝7291255

您可能需要尝试以下方法:SELECT  l.position,         l.username,         l.score,        @curRow := @curRow + 1 AS row_numberFROM    league_girl lJOIN    (SELECT @curRow := 0) r;这个JOIN (SELECT @curRow := 0)部件允许变量初始化,而不需要单独的SET命令。测试用例:CREATE TABLE league_girl (position int, username varchar(10), score int);INSERT INTO league_girl VALUES (1, 'a', 10);INSERT INTO league_girl VALUES (2, 'b', 25);INSERT INTO league_girl VALUES (3, 'c', 75);INSERT INTO league_girl VALUES (4, 'd', 25);INSERT INTO league_girl VALUES (5, 'e', 55);INSERT INTO league_girl VALUES (6, 'f', 80);INSERT INTO league_girl VALUES (7, 'g', 15);测试查询:SELECT  l.position,         l.username,         l.score,        @curRow := @curRow + 1 AS row_numberFROM    league_girl lJOIN    (SELECT @curRow := 0) rWHERE   l.score > 50;结果:+----------+----------+-------+------------+| position | username | score | row_number |+----------+----------+-------+------------+|        3 | c        |    75 |          1 ||        5 | e        |    55 |          2 ||        6 | f        |    80 |          3 |+----------+----------+-------+------------+3 rows in set (0.00 sec)

蝴蝶不菲

SELECT @i:=@i+1 AS iterator, t.*FROM tablename t,(SELECT @i:=0) foo
随时随地看视频慕课网APP
我要回答