作者snowfly (@@)
看板Database
标题Re: [SQL ] SQL语法问题(MySQL)
时间Wed Apr 17 21:31:52 2013
※ 引述《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)