MySQL - 生成的行号不是连续的
MySQL - Generated row numbers are not sequential
我正在尝试为从我的数据库中选择的每一行生成行号,但行号似乎遵循 table 在排列(排序依据)之前的顺序。
实际table
https://www.dropbox.com/s/otstzak20yxcgt6/test1.PNG?dl=0
查询后
https://www.dropbox.com/s/i9jaoy04vq6u2zh/test2.PNG?dl=0
代码
SET @row_num = 0;
SELECT @row_num := @row_num + 1 as Position, Student.Stud_ID, Student.Stud_Name, Student.Stud_Class, SUM(Grade.Percentage) AS Points
FROM Student, Student_Subject, Grade
WHERE Student.Stud_ID = Student_Subject.Stud_ID
AND Student_Subject.Stud_Subj_ID = Grade.Stud_Subj_ID
AND Student.Stud_Form = '1'
AND Grade.Quarter = '1'
GROUP BY Student.Stud_ID
ORDER BY Points DESC
请帮忙。期待收到yall的回复。谢谢!
尝试内部 select,这样行号将在 ORDER BY 之后生成,如下所示:
SET @row_num = 0;
SELECT @row_num := @row_num + 1 as Position, s.*
FROM
(
SELECT
Student.Stud_ID, Student.Stud_Name, Student.Stud_Class, SUM(Grade.Percentage) AS Points
FROM Student, Student_Subject, Grade
WHERE Student.Stud_ID = Student_Subject.Stud_ID
AND Student_Subject.Stud_Subj_ID = Grade.Stud_Subj_ID
AND Student.Stud_Form = '1'
AND Grade.Quarter = '1'
GROUP BY Student.Stud_ID
ORDER BY Points DESC
) AS s;
我正在尝试为从我的数据库中选择的每一行生成行号,但行号似乎遵循 table 在排列(排序依据)之前的顺序。
实际table https://www.dropbox.com/s/otstzak20yxcgt6/test1.PNG?dl=0
查询后 https://www.dropbox.com/s/i9jaoy04vq6u2zh/test2.PNG?dl=0
代码
SET @row_num = 0;
SELECT @row_num := @row_num + 1 as Position, Student.Stud_ID, Student.Stud_Name, Student.Stud_Class, SUM(Grade.Percentage) AS Points
FROM Student, Student_Subject, Grade
WHERE Student.Stud_ID = Student_Subject.Stud_ID
AND Student_Subject.Stud_Subj_ID = Grade.Stud_Subj_ID
AND Student.Stud_Form = '1'
AND Grade.Quarter = '1'
GROUP BY Student.Stud_ID
ORDER BY Points DESC
请帮忙。期待收到yall的回复。谢谢!
尝试内部 select,这样行号将在 ORDER BY 之后生成,如下所示:
SET @row_num = 0;
SELECT @row_num := @row_num + 1 as Position, s.*
FROM
(
SELECT
Student.Stud_ID, Student.Stud_Name, Student.Stud_Class, SUM(Grade.Percentage) AS Points
FROM Student, Student_Subject, Grade
WHERE Student.Stud_ID = Student_Subject.Stud_ID
AND Student_Subject.Stud_Subj_ID = Grade.Stud_Subj_ID
AND Student.Stud_Form = '1'
AND Grade.Quarter = '1'
GROUP BY Student.Stud_ID
ORDER BY Points DESC
) AS s;