学生 又有小组,班级,如何用递归查出每个学生的总成绩和每个小组的总成绩以及每个班级的总成绩,小组有m_id,班级有c_id
时间: 2024-02-29 18:53:25 浏览: 59
可以使用WITH RECURSIVE语句结合GROUP BY子句和聚合函数SUM来递归查询每个学生的总成绩和每个小组、班级的总成绩。假设你有一个"scores"表,包含学生的成绩信息(如学生ID、学科、成绩等),还有一个"students"表,包含学生的信息(如学生ID、姓名、小组ID、班级ID等),那么你可以使用以下SQL语句来递归查询每个学生的总成绩和每个小组、班级的总成绩:
```
WITH RECURSIVE
group_totals(g_id, g_total) AS (
SELECT m_id, SUM(score)
FROM scores
INNER JOIN students ON scores.student_id = students.student_id
GROUP BY m_id
),
class_totals(c_id, c_total) AS (
SELECT c_id, SUM(score)
FROM scores
INNER JOIN students ON scores.student_id = students.student_id
GROUP BY c_id
),
student_totals(student_id, total_score) AS (
SELECT student_id, SUM(score)
FROM scores
GROUP BY student_id
)
SELECT students.m_id, group_totals.g_total AS group_total, students.c_id, class_totals.c_total AS class_total, student_totals.total_score
FROM students
LEFT JOIN group_totals ON students.m_id = group_totals.g_id
LEFT JOIN class_totals ON students.c_id = class_totals.c_id
LEFT JOIN student_totals ON students.student_id = student_totals.student_id;
```
这个查询语句中,首先使用了WITH RECURSIVE语句创建了三个递归查询:group_totals查询小组的总成绩、class_totals查询班级的总成绩、student_totals查询每个学生的总成绩。然后,使用LEFT JOIN将这三个递归查询结果与"students"表进行连接,得到包括每个学生的小组总成绩、班级总成绩和总成绩的查询结果。
阅读全文