我有两个表 Student 和 Takes
学生:ID、姓名、部门名称
类(class):ID、类(class) ID、成绩
我需要找到每个学生的 ID 和姓名,以及他们所获得的总学分,但不计算学生获得 F 成绩的位置。
这就是我到目前为止所处的位置,但它是错误的,因为它会获取单个学生的姓名,并将该学生的所有学分加起来。
select student.ID, student.name, count(course_id) AS credits
FROM student, takes
WHERE student.ID = takes.ID and takes.grade != 'F';
results
ID name credits
001 stud1 20
最佳答案
要获取每个学生的计数,您需要对学生进行GROUP BY
(s.ID, s.name
):
SELECT s.ID, s.name, COUNT(*) AS credits
FROM student AS s
INNER JOIN takes AS t ON s.ID = t.ID
WHERE t.grade != 'F'
GROUP BY s.ID, s.name
我猜测某些类(class)比其他类(class)可以获得更多学分。因此,如果您有一个字段显示每门类(class)有多少学分,您可能需要链接该表并使用 SUM(CreditVal)
而不是 COUNT(*)
。像这样的东西:
SELECT s.ID, s.name, SUM(c.credits) AS TotalCreditsEarned
FROM student AS s
INNER JOIN takes AS t ON s.ID = t.ID
INNER JOIN course AS c ON c.ID = t.course_id
WHERE t.grade != 'F'
GROUP BY s.ID, s.name
在上面的查询中,只需将 c.ID = t.course_id
更改为将两个表链接在一起的字段即可。
关于MySQL 查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856084/