2012-08-08 39 views
12

我有一个学生具有以下字段的表:MySQL查询选择具有自动增量结果作为新列的结果添加

student(student_id, student_name, student_avg) 

我需要写在MySQL查询,将结果显示为:

Serial no。 =>结果还应该有一个新的列,序列号为1,2,3,...,n,就像结果中每行的自动增量一样。

student_id 
student_name 
student_avg > 4 

我不想以任何方式改变我的表格。我所要做的就是写一个查询,它会给我上面的结果。我希望我很清楚。

示例数据:

查询后
student_id   student_name  student_avg 
1     abc    2.5 
2     xyz    4.1 
3     def    4.2  

输出示例:

serial_no student_id student_name  student_avg 
    1    2   xyz    4.1 
    2    3   def    4.2 
+0

请贴乌尔表,并品尝了把 – 2012-08-08 09:53:57

+0

student_id数据student_name student_avg 1 ABC 2.5 2 XYZ 4.1 3 DEF 4.2样本输出serial_no student_id数据student_name student_avg 1个2 XYZ 4.1 2 3 DEF 4.2 – Aayush 2012-08-08 09:56:34

回答

40

试试这个上

SELECT @s:[email protected]+1 serial_number,student_id,student_name,student_avg 
FROM students, 
     (SELECT @s:= 0) AS s 
WHERE 
student_avg > 4; 

https://stackoverflow.com/a/11096550/1423506

+0

非常感谢您节省了我的时间:) – Aayush 2012-08-08 10:11:11

+1

之前找到类似的东西。但对我来说有一个问题:当我将它与另一个'order by'结合使用时,增量编号不再被排序,它在排序之前显然应用。 任何想法? – fluxon 2017-11-04 11:22:43

9
SET @serial=0; 
SELECT @serial := @serial+1 AS `serial_number`, `column_name` FROM `table_name`; 

你的具体情况:

SET @serial=0; 

SELECT 
    @serial := @serial+1 AS `serial_number`, 
    `student_id`, 
    `student_name`, 
    `student_avg` 
FROM 
    `students` 
WHERE 
    `student_avg` > 4; 
+1

谢谢你工作得对我来说很好:) – Aayush 2012-08-08 10:04:51