2014-02-18 172 views
0

我有两个表的学生和赞赏的MySQL数据库查询

学生:ID,姓名,DEPT_NAME

注意到:ID,COURSE_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 

回答

2

为了让每名学生的数,您需要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 

。因此,如果您有一个显示每门课程有多少学分的字段,则可能需要链接该表并使用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对什么领域是链接两个表一起。

+0

你是正确的,我也有一个学分列的课程表。 –

+0

当然如何与'take'关联? – Linger

+0

它看起来像course_id是两个链接 –

0

只需修改您的查询像

select s.ID, s.name, count(t.scourse_id) AS Total_Credits 
FROM student s join takes t 
on s.ID = t.ID and t.grade != 'F' 
group by s.id;