#每条记录有个平均分,平均分是这样算的,如果评分为0,表明没人给打分,则不计入平均分之列

Gooing 2004-08-02 10:21:42
我的一个视图是这样的
人员id,项目p,评分s1,评分s2,评分s3,评分s4

有如下的记录:
1> 小G,跳水, 5,5,5,3
2> 小G,跳高, 5,4,6,0
3> 大G,跳水,0,0,5,5
......

每条记录应该有个平均分,平均分是这样算的,如果评分为0,表明没人给打分,则不计入平均分之列,如1>是4.5 ,2>是(5+4+6)/3 =5,
而不是(5+4+6+0)/4 = 3.75;最后按人员将平均分的总和给算出来,如:
小G,9.5
大G,5
......

这样的SQL怎么写?我该如何判断 /几 ?
谢谢!
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjr332533 2004-08-02
  • 打赏
  • 举报
回复
select id,
p,
case when s1+s2+s3+s4=0
then 0
else (s1+s2+s3+s4)/((sign(isnull(s1,0))+sign(isnull(s2,0))+sign(isnull(s3,0))+sign(isnull(s4,0)))*1.0)
end as 平均分
from table

wozhuchuanwei 2004-08-02
  • 打赏
  • 举报
回复

Create Table #TB (
id int ,p VarChar(10), s1 int, s2 int, s3 int, s4 int)
INSERT INTO #TB (id,p,s1,s2,s3,s4)
Select 1,'跳水',5,5,5,3 UNION ALL
Select 2,'跳高',5,4,6,0 UNION ALL
Select 3,'跳水',0,0,5,5

Select * FROM #TB
SELECT *,CAST((s1+s2+s3+s4) As decimal(9,3))/(CASE s1 when 0 then 0 Else 1 END+CASE s2 when 0 then 0 Else 1 END+CASE s3 when 0 then 0 Else 1 END+CASE s4 when 0 then 0 Else 1 END) as 平均分 FROM #TB
Drop Table #TB


(所影响的行数为 3 行)

id p s1 s2 s3 s4
----------- ---------- ----------- ----------- ----------- -----------
1 跳水 5 5 5 3
2 跳高 5 4 6 0
3 跳水 0 0 5 5

(所影响的行数为 3 行)

id p s1 s2 s3 s4 平均分
----------- ---------- ----------- ----------- ----------- ----------- ----------------------
1 跳水 5 5 5 3 4.50000000000000
2 跳高 5 4 6 0 5.00000000000000
3 跳水 0 0 5 5 5.00000000000000

(所影响的行数为 3 行)

zjcxc 2004-08-02
  • 打赏
  • 举报
回复
select 人员id,项目p
,平均分=case (isnull(评分s1,0)+isnull(评分s2,0)+isnull(评分s3,0)+isnull(评分s4,0))
when 0 then 0
else (isnull(评分s1,0)+isnull(评分s2,0)+isnull(评分s3,0)+isnull(评分s4,0))
/(case isnull(评分s1,0) when 0 then 0 else 1 end
+case isnull(评分s2,0) when 0 then 0 else 1 end
+case isnull(评分s3,0) when 0 then 0 else 1 end
+case isnull(评分s4,0) when 0 then 0 else 1 end)
end
from 表
victorycyz 2004-08-02
  • 打赏
  • 举报
回复
select id,
p,
case when s1+s2+s3+s4=0
then 0
else (s1+s2+s3+s4)/((sign(s1)+sign(s2)+sign(s3)+sign(s4))*1.0)
end as 平均分
from tablename

victorycyz 2004-08-02
  • 打赏
  • 举报
回复
select id,
p,
case when s1+s2+s3+s4=0
then 0
else (s1+s2+s3+s4)/(sign(s1)+sign(s2)+sign(s3)+sign(s4))
end as 平均分
from tablename

Gooing 2004-08-02
  • 打赏
  • 举报
回复
thank you all!
列: Student_ID: 每个学生的唯一标识符。 名字: 学生的名字。 姓氏: 学生的姓氏。 电子邮件:联系电子邮件(可以匿名化)。 性别:男,女,其他。 年龄:学生的年龄。 部门:学生的部门(例如,计机科学,工程,商业)。 出勤率 (%): 出勤率百分比 (0-100%). Midterm_Score: 期中考试成绩(满分100分)。 Final_Score: 最终考试成绩(满分100分)。 Assignments_Avg: 所有作业的平均分(满分100分)。 Quizzes_Avg: 平均测验分数(满分100分)。 参与评分:根据课堂参与情况的评分(0-10)。 项目评分: 项目评估得分(满分100分)。 总分:所有成绩的加权总和。 成绩:字母等级(A, B, C, D, F)。 每周学习小时数:每周平均学习小时数。 课外活动:学生是否参加课外活动(是/否)。 家庭互联网接入:学生是否在家有互联网接入?(是/否)。 父母教育水平:父母的最高教育水平(无,高中,学士,硕士,博士)。 部分省略 出勤情况不计入总分或权重非常小。 总分=(期中考试0.15)+(期末考试0.25)+(作业平均分0.15)+(测验平均分0.1)+(参与度0.05)+(项目得分0.3) 数据集包含: 缺失值(空值):在某些记录中(例如,出勤、作业或家长教育水平)。 某些数据中的偏见(例如:评分偏见,例如,出勤率高的学生会获得稍微更好的成绩)。 分布不均衡(例如,某些部门的学生更多)。 注意: 数据集是真实的,但作者故意加入了一些偏见,以增加挑战。 某些列已被掩码化,因为数据所有者要求如此。 "Students_Grading_Dataset_Biased.csv" 包含了有偏见的数据集 "Students Performance Dataset" 包含了掩码化数据集

27,583

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧