能实现这样的查询吗?(40分)

  • 主题发起人 主题发起人 迈克老狼
  • 开始时间 开始时间

迈克老狼

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个系统,要实现学生成绩的加权平均,用sql能实现吗?
例如:成绩库里面有学生的各门课成绩,比如,英语、数学,历史。。。,如果求平均成绩排名
,可以select avg(cj) as cc from cjb order by cc desc可以实现,但是如果各门课程的
比例不同,比如数学在2,英语占2,而历史占1,要实现加权平均,sql怎么实现呢?
 
select avg( 英语*2+数学*2+历史*1) as cc from cjb order by cc desc

没测试,猜想,也就是数学1分当2分用
 
可是没有这么多的课程字段,每条记录中只有一门课,能实现吗?
 
Select xh,sum(cj1*2+cj2*2+cj3*1) as cj
(
select xh,cj1=(Select cj From cjb Where xh=cjb.xh and kc='数学')
,cj2=(Select cj From cjb Where xh=cjb.xh and kc='英语')
,cj3=(Select cj From cjb Where xh=cjb.xh and kc='历史')
from cjb
) A
order by cj
 
sql server 或者sybase:
select avg(分数*(case when 课程='数学' then 2 when 课程='历史' then 1 end ))
from... where ...
如果数据库是oracle,用decode代替case也行
 
接受答案了.
 
后退
顶部