2014-02-18 44 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;