2012-05-01 126 views
2

我對MySQL很新,仍然試圖學習繩索。請原諒我,如果這是太基本MySQL SUM()和COUNT()在多列

我有3個表:

學生:

Student id|Student name| Gender|Parent id 

家長:

Parent id|Parent name|Parent Address|Parent Phone| 

和類:

Class id|Class Name|Class day 

和學生點名電話:

Student id|Class Id 

我正在嘗試計算每個家長在學校的學生人數以及每個學生的班級數。

到目前爲止,我設法改變查詢來計算,他們需要支付的父母的名字和活動次數:

SELECT CONCAT_WS(' ',P.Parent_title,P.Parent_fname,P.Parent_sname) AS 'Parent name', 
COUNT(RC.Student_id) AS 'Number of Activities' 
FROM Student S,Parent P,RollCall RC,Class C 
WHERE S.Parent_id=P.Parent_id AND S.Student_id=RC.Student_id AND RC.Class_id=C.Class_id 
GROUP BY S.Parent_id; 

但我不知道如何包括SUM()計算總每個家長需要支付的金額,比如說每個班級是25美元。 我的教授暗示我需要使用CAST()函數,但我不確定我應該使用它。我應該在COUNT()的價值上使用它嗎?

再次感謝大家,你一直是一個巨大的幫助。 (我也會繼續努力)。

+0

假設父有三個孩子學校;結果集中的記錄會是什麼樣子? – eggyal

+0

對於有3個孩子的家長,我得到: 父母名稱|的學生 Mr. John Lot | 4 這是你的意思嗎? – user1361276

+0

我的意思是,如果你想到你在問什麼,真的不清楚如何爲一個在學校有三個孩子的家長加入數據。你想要的結果要麼只顯示每個家長一次,在這種情況下,它應該顯示什麼樣的學生姓名和班級數量?否則,同一位家長會出現三次,每次爲他們的孩子一次。你需要更清楚你想要結果的外觀。 – eggyal

回答

1

而且上面您的意見,我想這應該給你你以後在做什麼(每父入學兒童/班的總人數):

SELECT 
    CONCAT_WS(' ', Parent_title, Parent_fname, Parent_sname) AS 'Parent name', 
    COUNT(DISTINCT Student_id) AS 'Number of students', 
    COUNT(DISTINCT Student_id, Class_id) AS 'Number of classes' 
FROM 
     Parent 
    JOIN Student USING (Parent_id) 
    JOIN RollCall USING (Student_id) 
    JOIN Class USING (Class_id) 
GROUP BY Parent_id; 
+0

謝謝,我現在試試 – user1361276

+0

@ user1361276:它做你想做的嗎?僅供參考,如果他們爲您工作,您應該[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)(這就是我們爲什麼這麼做的原因!)。更好的是,如果答案對你有幫助,你也可以考慮[upvoting](http://stackoverflow.com/privileges/vote-up)。 – eggyal

+0

對不起!非常感謝! – user1361276

0

爲了改寫你想找到的內容,對每個家長來說,你想知道他在學校裏有多少學生,以及這些學生總共有多少班。我建議使用JOIN語法來連接所需的3個表。

SELECT CONCAT_WS(' ',P.Parent_title,P.Parent_fname,P.Parent_sname) AS 'Parent name', 
    count(distinct s.student_id) as num_students, 
    count(*) as studentclasses 
FROM Parent p 
    JOIN Student S 
    ON S.parent_id = p.parent_id 
     JOIN studentrollcall src 
     on s.student_id = src.student_id 
GROUP BY 'Parent name' 
+0

我試過這個,這是行不通的。 – user1361276

+0

@ user1361276你會得到什麼錯誤?這種加入背後的想法是,從家長到學生的加入可以是一對多的,而學生加入班級的加入可以是一對多的。因此,通過父項進行分組並計算所產生的聯接中的總行數應告訴您正在執行多少個類。 – davesnitty

+0

不是一個錯誤,我只是得到一個家長的學生總數的兩倍.... – user1361276