首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MySQL,如何在表中生成包含记录索引的列?

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

Stack Overflow用户
提问于 2010-06-27 17:37:26
回答 7查看 143.5K关注 0票数 100

有没有办法从查询中获得实际的行数?

我希望能够通过名为league_girl的字段对名为score的表进行排序;并返回用户名和该用户名的实际行位置。

我想排名的用户,所以我可以告诉一个特定的用户在哪里,即。乔排名第100位(满分200分),即

代码语言:javascript
复制
User Score Row
Joe  100    1
Bob  50     2
Bill 10     3

我在这里看到了一些解决方案,但我尝试了大多数解决方案,实际上没有一个返回行号。

我已经尝试过了:

代码语言:javascript
复制
SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score 
       FROM league_girl GROUP BY username ORDER BY score DESC) 

作为派生的

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

有什么想法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-27 17:49:34

您可能希望尝试以下操作:

代码语言:javascript
复制
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命令的情况下初始化变量。

测试用例:

代码语言:javascript
复制
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);

测试查询:

代码语言:javascript
复制
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;

结果:

代码语言:javascript
复制
+----------+----------+-------+------------+
| position | username | score | row_number |
+----------+----------+-------+------------+
|        3 | c        |    75 |          1 |
|        5 | e        |    55 |          2 |
|        6 | f        |    80 |          3 |
+----------+----------+-------+------------+
3 rows in set (0.00 sec)
票数 175
EN

Stack Overflow用户

发布于 2010-08-13 01:36:03

代码语言:javascript
复制
SELECT @i:=@i+1 AS iterator, t.*
FROM tablename t,(SELECT @i:=0) foo
票数 38
EN

Stack Overflow用户

发布于 2014-12-13 05:33:04

下面是我使用的模板的结构:

代码语言:javascript
复制
  select
          /*this is a row number counter*/
          ( select @rownum := @rownum + 1 from ( select @rownum := 0 ) d2 ) 
          as rownumber,
          d3.*
  from 
  ( select d1.* from table_name d1 ) d3

下面是我的工作代码:

代码语言:javascript
复制
select     
           ( select @rownum := @rownum + 1 from ( select @rownum := 0 ) d2 ) 
           as rownumber,
           d3.*
from
(   select     year( d1.date ), month( d1.date ), count( d1.id )
    from       maindatabase d1
    where      ( ( d1.date >= '2013-01-01' ) and ( d1.date <= '2014-12-31' ) )
    group by   YEAR( d1.date ), MONTH( d1.date ) ) d3
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3126972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档