150分再求三个排名语句

ninefive 2004-04-06 02:40:20
数据库:ACCESS
表名:Students
结构:XH(学号),BJ(班级),ZY(专业),YS(院系),NJ(年级),Score(分数),Selected(已答题为1)
数据类型除了Score和Selected为数字类型,其余都为字符型。
--------------------------------------
求:
1)班级平均分,在全校所有班级中的统一排名
2)专业平均分,在全校所有专业中的统一排名
3)院系平均分,在全校所有院系中的统一排名
其中关系是:
学校下面设若干院系,若干院系下面设若干专业,专业下面又分若干班
要求分数相等的名次相同,例如排名可以为,1,2,2,2,3,4,5,5,6,7,8……
显示格式为:
1)班级 专业 院系 平均分 排名
2)专业 院系 平均分 排名
3)院系 平均分 排名
...全文
14 点赞 收藏 28
写回复
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
ninefive 2004-04-10
此问题圆满解决,感谢大家的帮助!
回复
ninefive 2004-04-09
本问题受xieyj(Free Fish)的启发,采用ghostzp(风中一头猪)的方法,按照 cjf1009(农民程序员)的思想在大家的帮助下得以解决。但是在http://expert.csdn.net/Expert/topic/2927/2927396.xml?temp=.3436396这个贴子里的问题让班级按照年级等条件进行排名的问题并没有解决。请教了很多人,自己也想了很多办法,仍没有一个满意的答案。
这是班级排名的源代码,其余基本一样:
<table>
<tr>
<td colspan="6"><strong><font color="#FF00FF">班    级    排    名</font></strong></td>
</tr>
<tr align="center">
<td width="10%">年级</td>
<td width="10%">班级</td>
<td width="31%">专业</td>
<td width="31%">院系</td>
<td width="10%">平均分</td>
<td width="8%">排名</td>
</tr>
</table>
<%
set rs=server.createobject("adodb.recordset")
sql="select sum(score)/count(bj) as pjf,bj from score where Selected=1 group by bj order by sum(score)/count(bj) desc"
rs.open sql,conn,1,3
score=0
paiming=0
do while not rs.eof
if score<>rs("pjf") then
score=rs("pjf")
paiming=paiming+1
end if
bj=rs("bj")
set rs1=server.createobject("adodb.recordset")
sql1="select * from score where bj='"&bj&"' and Selected=1" '找出全班所有的人數
rs1.open sql1,conn,1,3
%>
<table width="90%" height="2" border="0" align="center">
<tr>
<td></td>
</tr>
</table>
<table>
<tr align="center">
<td width="10%">
<%response.write rs1("nj")%>
</td>
<td width="10%">
<%response.write bj%>
</td>
<td width="31%">
<%response.write rs1("zy")%>
</td>
<td width="31%">
<%response.write rs1("ys")%>
</td>
<td width="10%">
<%response.write FormatNumber(rs("pjf"))%>
</td>
<td width="8%">
<%response.write paiming%>
</td>
</tr>
</table>
<%rs.movenext
loop %>
再次感谢大家!
回复
onlytiancai 2004-04-09
厉害 ,学习ing
回复
hchxxzx 2004-04-09
一时大意,写错了一点点
求取班级平均分的排名(只简单列出班级及排名)
select bj,score from (select bj,sum(score)/count(*) as score from tab group by bj) order by score
回复
hchxxzx 2004-04-09
其余的一样啊
回复
hchxxzx 2004-04-09
求取班级平均分的排名(只简单列出班级及排名)
select bj,score from (select bj,sum(score)/count(*) as score from tab order by bj) order by score
回复
cjf1009 2004-04-08
顶,希望楼主把你已经实现的代码贴出来,也不枉大家帮你出力了。
回复
snowcloud2002 2004-04-07
up
回复
ninefive 2004-04-07
多谢楼上各位!
回复
cjf1009 2004-04-07
<%sql="select sum(score)/count(bj) as pjf,bj from table where Selected='1'group by bj order by pjf desc" '按班及分組,算平均分,班級名字,按平均分排名
rs.open sql,conn,1,3

score=0
paiming=0
do while not rs.eof
if score<>rs("pjf") then
score=rs("pjf")
paiming=paiming+1
end if'按楼主的要求,这里应该这样
回复
ninefive 2004-04-07
UP!
回复
若白师妹 2004-04-07
整理了一下:
<%sql="select sum(score)/count(bj) as pjf,bj from table where Selected='1'group by bj order by pjf desc" '按班及分組,算平均分,班級名字,按平均分排名
rs.open sql,conn,1,3
paiming=0
do while not rs.eof
paiming=paiming+1
bj=rs("bj")
sql1="select * from table where bj='"&bj&"' where Selected='1'" '找出這個班所有的人數
rs1.open sql1,conn,1,3
tmp1=rs1.recordcount
pjf=rs("sum1")/tmp1 '班級平均分 %>
<table><tr>
<td><%response.write bj%></td>
<td><%response.write rs1("zy")%></td>
<td><%response.write rs1("ys")%></td>
<td><%response.write pjf%></td>
<td><%response.write paiming%></td>
</tr></table>
<%rs.movenext
loop %>
sql server 2000下通過.
如果你還是出現其他錯誤,先確保你的sql語句沒有錯誤,打開sql查詢分析器,一句一句驗證
1.select sum(score) as sum1,bj from table where Selected='1'group by bj ,通過?
2.select sum(score) as sum1,count(bj) as sum2,bj from table where Selected='1'group by bj ,通過?

3.select sum(score)/count(bj) as pjf,bj from table where Selected='1'group by bj order by pjf desc ,通過?
回复
caoshangfei 2004-04-06
直接把排名用一句sql语句写出来我想可能性不大的。
回复
cjf1009 2004-04-06
sql语句xieyj(Free Fish) 已经写出来了,不过排名,按你说的那种,估计要asp写出来,因为你的库里没有排名字段,显示的时候用循环,赋值记录这个值,然后跟下一个值比较,相同就不变,变了就+1。

本人拙见
回复
xieyj 2004-04-06
bj:
select sum(score)/count(bj) as test,bj from students group by bj order by sum(score)/count(bj)

zy:
select sum(score)/count(zy) as test,zy from students group by zy order by sum(score)/count(zy)

ys:
select sum(score)/count(ys) as test,ys from students group by ys order by sum(score)/count(ys)
回复
xxrl 2004-04-06
楼主先在sql server里面用视图表示出来,然后拷贝sql语句,就搞定了!既然不会写,那么就像我信仰的一种方法一样:靠,笨人有笨方法,能实现就行。
回复
ninefive 2004-04-06
非常感谢 ghostzp您的帮助
我想实现的是按照班级的平均分来排名
另外这句话:
sql="select sum(score) as sum1,bj from score where Selected=1 group by bj order by sum1 desc" '按班及分組,算總分,班級名字,按總分排名
rs.open sql,conn,1,3
调试时提示:
Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e10'

[Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。

/xuanchuanbu/bjpm.asp,行5
这又是怎么回事呢?
回复
若白师妹 2004-04-06
1)班级平均分,在全校所有班级中的统一排名
<%sql="select sum(score) as sum1 ,bj from table where Selected='1'group by bj order by sum1 desc" '按班及分組,算總分,班級名字,按總分排名
rs.open sql,conn,1,3
paiming=0
do while not rs.eof
paiming=paiming+1
bj=rs("bj")
sql1="select * from table where bj='"&bj&"' where Selected='1'" '找出這個班所有的人數
rs1.open sql1,conn,1,3
tmp1=rs1.recordcount
pjf=rs("sum1")/tmp1 '班級平均分 %>
<table><tr>
<td><%response.write bj%></td>
<td><%response.write rs1("zy")%></td>
<td><%response.write rs1("yx")%></td>
<td><%response.write pjf%></td>
<td><%response.write paiming%></td>
</tr></table>
<%rs.movenext
loop %>
大概思路就是這樣子吧,寫的有點醜,高手不要笑喔 :(
回复
ninefive 2004-04-06
再看看
回复
hujing008 2004-04-06
呵呵一个角。。。up
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告