※ 引述《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)