看板 Database 關於我們 聯絡資訊
※ 引述《arkcsl (米斯特・亞克)》之銘言: : : 問題一: : : 我想要用GroupName去列出在這個Group裡面所有學生的成績分數 : : 我的SQL語法如下,如果Groups裡的GroupName是單一筆時,下面SQL語法是work的, : : 但如果GroupName有兩筆以上時,則無法正常執行, : : 請各位前輩指點小弟一下,該如何修正? : 正常來說group name應該是要unique才是。 : 既然ID區間不同,為什麼要取一樣的名稱呢? : 會異常的原因是因為你的select會得到超過一個以上的回傳值, : 如果你的group name一定要一樣,你要先想辦法把兩個以上轉換成只有一個回傳值 因為這個Group裡面會有不同區間的StudentID ex: 1~3 和 7~8 屬於Group A : : ----------------------------------------------------------- : : SELECT * FROM `Score` WHERE : : `StudentID` BETWEEN : : (SELECT `ID_START` FROM `Groups` WHERE `GroupName`='A') : : AND : : (SELECT `ID_END` FROM `Groups` WHERE `GroupName`='A') : : ; : : ----------------------------------------------------------- : : 問題二: : : 我想要用GroupName去統計在每個Group裡面的學生ScoreA分數總和ScoreB分數總和 : : 我的SQL語法如下,不知道是否各位前輩是否有更好的SQL語法? : : ------------------------------------------------------------------------- : : SELECT `Groups`.`GroupName`,SUM(`Score`.`ScoreA`),SUM(`Score`.`ScoreB`) : : FROM `Score`,`Groups` WHERE : : `Score`.`StudentID` BETWEEN `Groups`.`ID_START` AND `Groups`.`ID_END` : : GROUP BY `Groups`.`GroupName`; : : ------------------------------------------------------------------------- : 既然是用group name為單位,為什麼不要直接join兩個table呢? : 然後最後再SUM,但是如果依照你的group table來看,你沒有辦法區分兩個A group 是,因為想利用BETWEEN語法快速找出在這個區間的學生, 但是一個GroupName裡面又會有一個或多個ID區間, 不知道這樣的話,是否有更好的Table設計方法?或是其他的方式可以達到我的需求? 煩請各位前輩指點一下,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.239.1.35 ※ 編輯: snowfly 來自: 36.239.1.35 (04/17 21:32)