SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分student表Score表求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分方案一:SELEC

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/29 16:32:17
SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分student表Score表求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分方案一:SELEC
xV[oG+U,{g&H!qi%HTTƦmA@bFp)R$C xg=kgRK%;3{7g<.=w7~sצ+OY!ϞTjkoBBv;,7_q={_\bfXa]vgӯfg<㸕B\e3 ؉XW9ׯA}ڞYq:%9g C!g8|&"d&I;'H^HUA8,vu *L,M*K2,1j )*H2JlJmŐME !)Y ,Te[٘,*%QBbL $հ%UPE`I"Mi`S1%"$ɲ)#5I,D,# Ib‡ꢨXd"/JT(K < ǻzb^t;d#gX_, 'edðlE0-!I 﫶ada/.y1ܓ:Tjr?Ut2tn T? t}H)2)Qa#&ـPR]M(`ՊRl˖@94DM$!e B,bC*!M [eYzX|+J)[ʹgϠȫ,t{g /j+Dڣ!@e{>]u>s>;av;6f_sȮ{[Ԫ_84[-5o+#g5{;`3ձWt{hn`V8D]vVZv&["G0ʵl1Ye w{D\u8#[}y]\^~7w2 +b3`9uuEZZb?s z]80DS 8xEe*ޙ}a;Q_f/ߗs˓hnEmp z9Üc2@0$Oݓb`->K~{EvRziM<ApoC}x2 v {=4 KtfKRXy:VKՂW#̬:tZ'Z

SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分student表Score表求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分方案一:SELEC
SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分
student表

Score表

求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分
方案一:SELECT Student.SNAME,SCORE.CNO,SCORE.GRADE FROM Student,SCORE
WHERE SCORE.GRADE IN ( SELECT MAX(GRADE)AS MAXXGRADE FROM SCORE GROUP BY SCORE.SNO)AND STUDENT.SNO=SCORE.SNO

方案二:SELECT SNAME ,CNO,GRADE FROM Score Y,Student 
WHERE (STUDENT.SNO=Y.SNO)AND Y.GRADE IN (SELECT MAX(GRADE) 
FROM SCORE WHERE SNO=Y.SNO GROUP BY SNO)

为什么我第一种写的不是我想要的第二种的答案.

SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分student表Score表求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分方案一:SELEC

你好,你展示的第一种sql查询方案,其意思是:

先根据score表中的sno分组求每个sno的最高分数.这求得的当然是每个同学的最高分啦,但是只是获得了最高分,没有指定是谁的最高分,导致在前面的【SELECT SNAME ,CNO,GRADE FROM Score Y,Student WHERE (STUDENT.SNO=Y.SNO)】查询结果集中的后面检索条件【AND Y.GRANDE IN (所有人的最高分集合)】,这样系统就会查询分数在“所有人的最高分”里的结果集了.

而第二种方案,除了限定分数范围(最高分),还限定了学生的编号(

SELECT MAX(GRADE) FROM SCORE WHERE
SNO=Y.SNO
GROUP BY SNO,sno = y.sno就是限定学生的编号.

),所以结果自然不同了.

根据你的要求,我给你提供一种查询方式.其实原理是一样的哦.

select stu.sname, scr.cno,scr.grade from student stu
left join score scr on scr.sno = stu.sno 
where exists (select 1 from (select s.sno,max(s.grade) as mg from score s group by s.sno) t where t.sno = stu.sno
and t.mg = scr.grade)

希望能帮助你.