我有下表:
+-----+-----------+----------+------------+------+
| key | idStudent | idCourse | hourCourse | mark |
+-----+-----------+----------+------------+------+
| 0 | 1 | 1 | 10 | 78 |
| 1 | 1 | 2 | 20 | 60 |
| 2 | 1 | 4 | 10 | 45 |
| 3 | 3 | 1 | 10 | 90 |
| 4 | 3 | 2 | 20 | 70 |
+-----+-----------+----------+------------+------+
使用一个简单的查询,我可以根据hourCourse
和向学生展示他们的加权平均值mark
:
SELECT idStudent,
SUM( hourCourse * mark ) / SUM( hourCourse ) AS WeightedAvg
FROM `test`.`test`
GROUP BY idStudent;
+-----------+-------------+
| idStudent | WeightedAvg |
+-----------+-------------+
| 1 | 60.7500 |
| 3 | 76.6667 |
+-----------+-------------+
但是现在我需要选择寄存器,直到hourCourse
每个学生的累积总和达到阈值。例如,对于 30 的阈值hourCourse
,只应考虑以下寄存器:
+-----+-----------+----------+------------+------+
| key | idStudent | idCourse | hourCourse | mark |
+-----+-----------+----------+------------+------+
| 0 | 1 | 1 | 10 | 78 |
| 1 | 1 | 2 | 20 | 60 |
| 3 | 3 | 1 | 10 | 90 |
| 4 | 3 | 2 | 20 | 70 |
+-----+-----------+----------+------------+------+
key
不考虑 2,因为idStudent
1 已经达到 30hourCourse
与idCourse
1 和 2。
最后,查询解决方案应该如下:
+-----------+-------------+
| idStudent | WeightedAvg |
+-----------+-------------+
| 1 | 66.0000 |
| 3 | 76.6667 |
+-----------+-------------+
有没有办法为此创建内联查询?提前致谢。
编辑:选择课程时的标准是从最高分到最低分。 编辑:当hourCourse 的累积总和小于30 时,包括寄存器。例如,将包括两个各20 小时的寄存器(总和40),以下不包括。