重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这里userid设置为1001,这里先统计每名课程成绩大于张三成绩的学生数,然后在统计的数上加1即为张三的排名。这里是mysql的测试,如需在oracle上使用,请把IFNULL函数换成oracle的NVL函数。根据tab后面的数字阅读会清楚一点,可以一个一个tab先执行看结果。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网页空间、营销软件、网站建设、邻水网站维护、网站推广。
select tab4.kcid,IFNULL((select tab5.kcrank from (select tab3.kcid as kcid,count(*) as kcrank from (select tab2.* from chengji tab2 , (select * from chengji where userid=1001) tab1 where tab2.kcid=tab1.kcid and tab2.cj tab1.cj) tab3 group by tab3.kcid) tab5 where tab4.kcid=tab5.kcid),0)+1 as kcrank from chengji tab4 where tab4.userid=1001
请参考下列SQL语句:
select student.sno,student.sname,student.sdept,
course.cname,t.maxgrade from
student,course,
(select s.sno,c.sdept,s.cno,c.maxgrade
from sc s,student st,
(select a.sdept,b.cno,max(b.grade) as maxgrade
from student a,sc b where a.sno=b.sno
group by a.sdept,b.cno) c
where s.sno=st.sno and st.sdept=c.sdept and
s.grade=c.maxgrade) t where student.sno=t.sno
and course.cno=t.cno order by course.cname,student.sdept;
上述语句已经测试通过。代码思路是:
学生表与成绩表基于学号进行连接获取每个学号所在系名,然后用院系和课程号对成绩表分组汇总,求得每个院系、每个课程的最高得分(结果集c,含系名、课程号和最高分)。然后用结果集C再次与成绩表、学生表进行比对,筛选出获得每个系、每个课程的最高分的学号并包含课程号和系名(结果集t)。最后t通过连接获取学生表中的学生姓名、课程表中的课程名完成最后输出。
select * from 成绩表 where (语文成绩+外语成绩+数学成绩)=500 and (语文成绩+外语成绩+数学成绩)=550