在mysql查询中生成序列号

sus*_*hil 26 mysql sql

我有一张桌子:student_marks

marks
-----
  44
  55
  64
  98
  76
Run Code Online (Sandbox Code Playgroud)

预期产量:

serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76
Run Code Online (Sandbox Code Playgroud)

使用mysql用户定义的变量,可以使用查询来完成:

 set  @a:=0;select @a:=@a+1 serial_number, marks from student_marks;
Run Code Online (Sandbox Code Playgroud)

有没有办法在msyql中实现这一点而不使用用户定义的变量?

Gar*_*thD 60

基于您不希望使用用户定义变量的原因,希望避免有2个查询,一个用于初始化,一个用于它,您可以使用以下内容:

SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;
Run Code Online (Sandbox Code Playgroud)

  • @diEcho [MySQL Docs](http://dev.mysql.com/doc/refman/5.0/en/select.html) 状态 **当使用标识符为 select_expr 设置别名时,AS 关键字是可选的。** 见这个[SQL Fiddle 上没有 AS 的工作示例](http://www.sqlfiddle.com/#!2/0705e4/1) (2认同)

小智 6

此问题的最佳答案应为以下最佳实践

SET @count:=0;
SELECT  (@count:=@count+1) AS serial_number, 
        marks 
FROM    student_marks
Run Code Online (Sandbox Code Playgroud)

  • 这不是相同的答案,而且它比@GarethD 的解决方案退出得更快 (2认同)