SQL在查询上添加子索引列?

时间:2018-05-04 00:47:11

标签: php mysql

我有一个以下近似格式的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(*)可以用于单个列中的总独特字段?

1 个答案:

答案 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