为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2019-06-12 16:36:41
使用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)导出.但它似乎没有返回行的位置.有什么想法吗?
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您可能需要尝试以下方法:


SELECT  l.position, 

        l.username, 

        l.score,

        @curRow := @curRow + 1 AS row_number

FROM    league_girl l

JOIN    (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_number

FROM    league_girl l

JOIN    (SELECT @curRow := 0) r

WHERE   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)


查看完整回答
反对 回复 2019-06-12
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

SELECT @i:=@i+1 AS iterator, t.*FROM tablename t,(SELECT @i:=0) foo


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 700 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信