【问题标题】:How to show sequential number in MySQL query result如何在 MySQL 查询结果中显示序号
【发布时间】:2011-08-28 16:29:02
【问题描述】:

我有一些简单的查询:

SELECT foo, bar FROM table

我想你现在的结果是什么样的。

我想要做的是根据查询结果中出现的数据数量显示一些序列号。就像AUTO_INCREMENT(这并不意味着我要显示ID)。 我想要的结果是这样的:

|No|   foo   |    bar   |
-------------------------
|1 |   bla   |    123   |
|2 |   boo   |    abc   |
|3 |   wow   |    xxx   |

我该怎么做?

提前致谢

【问题讨论】:

    标签: mysql select


    【解决方案1】:

    如果有人想在排序记录后显示行号,这样的事情可能会起作用

    set @a=0; 
    select @a:=@a+1 serial_number,t.* 
    from ( SELECT foo, bar FROM tableORDER BY bar ) t
    

    【讨论】:

    【解决方案2】:

    这两个答案都不适合我,但根据bungditosource,我意识到你可以做一些更简单的事情:

    SET @a:=0;
    SELECT @a:=@a+1 No, foo, bar
    FROM table;
    

    所以,首先确保SET @a:=0; 运行。这将设置你的变量,a。然后您可以使用@a:=@a+1 在结果中增加它。我使用 GROUP BY、ORDER BY 甚至 JOINS 对此进行了测试,结果按预期工作。

    【讨论】:

    • 不错的答案!感谢分享。您的回答对我有所帮助,但我认为使用 AS 关键字时可读性更高。这也将有助于像我这样的初学者,他们可能不知道 AS 关键字可以省略。我昨晚才发现这个。如果不小心删除或忘记了逗号,则在使用 AS 子句时会出现语法错误,但如果您没有 AS 子句,它将简单地将 col1 别名为 col2,尽管它不是预期的行为,但没有任何指示。但对于像您这样的高级用户来说,这确实是一个不错的速记。 +1 为其他答案的简单性和可读性。谢谢
    • 当我使用 ORDER BY 时对我不起作用。行号似乎是在排序发生之前分配的,因此行号在结果中没有升序。
    【解决方案3】:

    如果您在查询中使用GROUP BY 子句,则订单会被打乱。解决方法是将您的查询放在这样的FROM 子句中。

    SET @a:=0;
    SELECT @a:=@a+1 No, output.*
    FROM (
         SELECT foo, bar
         FROM table GROUP BY foo, bar
     ) output;
    

    【讨论】:

      【解决方案4】:
      select @rownum:=@rownum+1 No, foo, bar from table, (SELECT @rownum:=0) r;
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2014-09-04
      相关资源
      最近更新 更多