我有一个以下近似格式的SQL表
+----+------------+------------+----------+------+
| id | fin_date | student_id | course_id| mark |
+----+------------+------------+----------+------+
| 1 | 2018-05-03 | 10049 | 1 | 60 |
| 2 | 2018-05-03 | 10032 | 2 | 45 |
| 3 | 2018-05-03 | 10032 | 1 | 88 |
| 4 | 2018-05-03 | 10032 | 1 | 96 |
+----+------------+------------+----------+------+
不幸的是,我刚刚被要求提供一个“student_course_id”子索引的索引,该索引代表学生在那之前学习的课程数量......下面的示例
+----+------------+------------+----------+------+-------------------+
| id | fin_date | student_id | course_id| mark | student_course_id |
+----+------------+------------+----------+------+-------------------+
| 1 | 2018-05-03 | 10049 | 1 | 60 | 1 |
| 2 | 2018-05-03 | 10032 | 2 | 45 | 1 |
| 3 | 2018-05-03 | 10032 | 3 | 88 | 2 |
| 4 | 2018-05-03 | 10032 | 4 | 96 | 3 |
| 5 | 2018-05-03 | 10049 | 2 | 60 | 2 |
+----+------------+------------+----------+------+-------------------+
这样当你在两个日期之间查找索引id = 3时,你就可以立即告诉它是该学生已经学过的第二门课程。
我真的不想在我的表中添加一个新列,有没有办法以类似的方式添加这个额外的列COUNT(*)可以用于单个列中的总独特字段?
答案 0 :(得分:0)
好吧,我想我过早地问了一下。我想通了......
SELECT *, ( select count(*) from `marks` t2
where t1.student_id = t2.student_id and t1.id >= t2.id )
as student_course_id FROM `marks` as t1