当前位置: 代码迷 >> Sql Server >> 小弟我想写一个平均分排名sql应该如何写
  详细解决方案

小弟我想写一个平均分排名sql应该如何写

热度:29   发布时间:2016-04-24 09:06:44.0
我想写一个平均分排名sql应该怎么写
主要卡在要根据班级做平均分,要实现的样子大概是这样,  但是我查询出来的平均分都是全班的。不知道应该怎么写了。有个考生试卷成绩表,三个外键,考试Id,科目Id,学生Id
------解决思路----------------------
上一些生成测试数据的语句吧,这样帮你的人就多了
------解决思路----------------------
貌似你截图中表还不全吧,科目表,各科成绩,班级表都没看到啊,贴出解决问题涉及到的各个表的表结构
------解决思路----------------------
胡乱猜测,是不是这个:
with table1 as
(
select '200910001' 班级, 105.85 语文平均分, 0 文科数学平均分, 107.73 理科数学平均分, 106.28 英语平均分 union all
select '200910002' 班级,  97.75 语文平均分, 0 文科数学平均分,  95.35 理科数学平均分, 100.63 英语平均分 union all
select '200910003' 班级, 101.94 语文平均分, 0 文科数学平均分, 105.03 理科数学平均分, 107.39 英语平均分 union all
select '200910004' 班级, 101.56 语文平均分, 0 文科数学平均分, 108.65 理科数学平均分, 106.25 英语平均分
)
select 班级, 
语文平均分, ROW_NUMBER() over(order by 语文平均分 desc), 
文科数学平均分, ROW_NUMBER() over(order by 文科数学平均分 desc), 
理科数学平均分, ROW_NUMBER() over(order by 理科数学平均分 desc),
英语平均分, ROW_NUMBER() over(order by 英语平均分 desc)
from table1
order by 班级

------解决思路----------------------
SELECT T1.ClassName
,SUM(CASE WHEN T4.SubjectName='语文'THEN T3.Score END)/T1.ClassStuNum[语文平均分]
,RANK()OVER(ORDER BY SUM(CASE WHEN T4.SubjectName='语文'THEN T3.Score END)/T1.ClassStuNum DESC)[语文平均分]
FROM(SELECT A.ClassId,A.ClassName,COUNT(1)ClassStuNum FROM 班级表 A JOIN Sys_ClassGroup B ON A.ClassId=B.ClassId GROUP BY A.ClassId,A.ClassName) T1
LEFT JOIN Sys_ClassGroup T2 ON T1.ClassId=T2.ClassId
LEFT JOIN Pro_StuScoreForm T3 ON T2.StuId=T3.StuId
LEFT JOIN 科目表 T4 ON T3.SubjectId=T4.SubjectId
GROUP BY T1.ClassName
,T1.ClassStuNum
你参考一下,其它的类似添加即可
  相关解决方案