注册 登录
编程论坛 ASP技术论坛

[求助]请问一句sql语句

zhulei1978 发布于 2007-10-22 20:20, 745 次点击

student表:
学号 姓名
1 张雨
2 李芳
3 赵群
4 陈真
5 霍元甲
6 张丽
7 李丽

course表:
课程号 课程名
1 高等数学
2 英语
3 电子技术
4 C语言
5 计算机应用技术

grade表:
学号 课程号 成绩
1 1 90
1 2 100
1 3 80
2 1 75
2 2 85
2 3 90
3 2 85
3 3 95
4 3 97
6 2 90
7 2 95

sql语句:
SELECT 姓名,专业,课程名,成绩
FROM student,grade,course
where 成绩 in (select max(grade.成绩) from grade group by 课程号)
and student.学号=grade.学号 and course.课程号=grade.课程号

我想找出每门课程中成绩最高的学生的并输出姓名,专业,课程名和课程号
但是输出的结果是:
张雨 自动化 高等数学 90
张雨 自动化 英语 100
李芳 机械工程 电子技术 90
张丽 机械工程 英语 90
陈真 机械工陈 电子技术 97

请问应该如何修改sql语句。

10 回复
#2
dhdhzzw2007-10-23 11:33

不对么?我看就是这样输出的阿。。。

#3
绿梦2007-10-23 11:43
你是不是少给了一个表?
#4
中国男孩2007-10-23 11:44

我觉得你用英文要好些?

#5
cainiao1582007-10-23 12:11
SELECT 姓名,专业,课程名,成绩 好像3个表中没有专业这个字段!!
#6
tianyu1232007-10-23 12:23
来个嵌套SQL语句就可以了,试试!

可能有更简单的!

[CODE]<%
set rs=server.createobject("adodb.recordset")
sql="select 课程号,max(成绩) as num from grade group by 课程号"
rs.open sql,conn,1,1
do while not rs.eof
set rst=server.createobject("adodb.recordset")
sql="select 姓名,课程名,成绩 from student,grade,course where student.学号=grade.学号 and course.课程号=grade.课程号 and 课程号="& rs("课程号") &" and 成绩="& rs("num") &""
rst.open sql,conn,1,1
if not(rst.bof and rst.eof) then
do while not rst.eof
response.write rst("姓名")&"&nbsp;"
response.write rst("课程名")&"&nbsp;"
response.write rst("成绩")&"<br>"
rst.movenext
loop
rst.close
set rst=nothing
end if
rs.movenext
loop
rs.close
set rs=nothing
conn.close
set conn=nothing
%[/CODE]

[此贴子已经被作者于2007-10-23 13:05:02编辑过]

#7
madpbpl2007-10-23 12:37

楼主想得到什么样的结果呢?
是不是只有下面三项数据?
张雨 自动化 高等数学 90
张雨 自动化 英语 100
陈真 机械工陈 电子技术 97

#8
madpbpl2007-10-23 21:49
sql ="select min(课程名) as 课程名,min(姓名) as 姓名,min(grade.学号) as 学号,max(grade.成绩) as 成绩,grade.课程号 from grade,course,student where student.学号=grade.学号 and course.课程号=grade.课程号 group by grade.课程号"
#9
tianyu1232007-10-24 16:52
以下是引用madpbpl在2007-10-23 21:49:23的发言:
sql ="select min(课程名) as 课程名,min(姓名) as 姓名,min(grade.学号) as 学号,max(grade.成绩) as 成绩,grade.课程号 from grade,course,student where student.学号=grade.学号 and course.课程号=grade.课程号 group by grade.课程号"

学习。。。

#10
tianyu1232007-10-24 17:14
以下是引用madpbpl在2007-10-23 21:49:23的发言:
sql ="select min(课程名) as 课程名,min(姓名) as 姓名,min(grade.学号) as 学号,max(grade.成绩) as 成绩,grade.课程号 from grade,course,student where student.学号=grade.学号 and course.课程号=grade.课程号 group by grade.课程号"

好像有问题呀!

当课程名,姓名或学号中存在可以区分大小的字符时会出现错误统计!

假设表中有如下数据:

姓名 课程名 成绩

张三 数学 90
李四 数学 100

那么统计后会出现下面的结果:

姓名 课程名 成绩

张三 数学 100

#11
madpbpl2007-10-24 18:44
以下是引用tianyu123在2007-10-24 17:14:05的发言:

好像有问题呀!

我测试了一下,好象没有你说的这种情况,应该可以的。代码如下,表的结构参考楼主的表的设计。

<!--#include file="conn.asp"-->
<%
Set rs =Server.CreateObject("adodb.recordset")
sql ="select min(课程名) as 课程名,min(姓名) as 姓名,min(grade.学号) as 学号,max(grade.成绩) as 成绩,grade.课程号 from grade,course,student where student.学号=grade.学号 and course.课程号=grade.课程号 group by grade.课程号"
rs.open sql,conn,1,1
%>
<%
do while not rs.eof
%>
<%=rs("课程号")%>&nbsp;
<%=rs("姓名")%>&nbsp;
<%=rs("课程名")%>&nbsp;
<%=rs("成绩")%><br>
<%
rs.movenext
loop
%>
1