SELECt id_student, id_class, grade, @student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn, @class:=id_class AS clsetFROM (SELECt @student:= -1) s, (SELECT @class:= -1) c, (SELECT * FROM mytable ORDER BY id_class, id_student ) t
这以非常简单的方式起作用:
- 初始查询按
id_class
第一,id_student
第二顺序排序。 @student
并@class
初始化为-1
@class
用于测试是否输入下一组。如果的先前值id_class
(存储在中@class
)不等于当前值(存储在中id_class
),则将@student
其清零。否则增加。@class
分配了新值id_class
,并将在下一行的第3步的测试中使用该值。



