日期:2014-05-18  浏览次数:20675 次

新生求教:关于group by子句
有表如下:
SQL code

学生成绩表(stuscore):
姓名:name 课程:subject分数:score学号:stuid
张三 数学 89 1
张三 语文 80 1
张三 英语 70 1
李四 数学 90 2
李四 语文 70 2
李四 英语 80 2




要求:计算每个人的总成绩
方法一:
SQL code

select distinct t1.name,t1.stuid,t2.allscore from  stuscore t1,

(

    select stuid,sum(score) as allscore from stuscore group by stuid

)t2

where t1.stuid=t2.stuid

order by t2.allscore desc



方法二:
SQL code

 select stuid,name,sum(score) as allscore from stuscore group by stuid,name




我经常用方法二,难道真的影响查询结果的准确?!!!
好担心,项目都写了一半了

------解决方案--------------------
select stuid,max(name),sum(score) as allscore from stuscore group by stuid

我一般这样写,姓名容易重名,学号不会重
------解决方案--------------------
是的,会影响的
你的第二个语句是根据stuid,name
这两个字段来分组的,如果name 有重名的情况就会出现错误结果


------解决方案--------------------
但是如果你能保证id 和name是一对一对应的,就没有问题
------解决方案--------------------
探讨
select stuid,max(name),sum(score) as allscore from stuscore group by stuid

我一般这样写,姓名容易重名,学号不会重