当前位置: 首页 > 知识库问答 >
问题:

根据不同情况给学生评分

唐煜
2023-03-14

嗨,所有人,

我在不同的科目上有学生的分数。

表 #Maths 包含名为 a,b 和 c 的学生的数学分数。#Science和#English类似。

现在我想要的输出是,如果学生在两个科目上超过75分,他将被评为“优秀”。如果他的一门课超过75分,另一门课超过60分,那么他的成绩就是“及格”,如果没有一门课超过75分,而有一门课不到50分,那么他的成绩就是“不及格”。

请为结果提供解决方案?

谢啦

共有2个答案

魏翰
2023-03-14

您可以尝试以下查询:

  • 此查询肯定比Joins更快,因为它减少了case条件的操作集
  • 业务逻辑被巧妙地封装为权重和顶级查询条件的一部分
  • 无连接,因此速度更快。当你开始增加学生记录和科目表时,速度将变得明显

查询:

select 
  id, 
  name, 
  case 
       when sum(weightRank) >=32 then "Merit"
       when sum(weightRank) >=20 then "Pass"
       when sum(weightRank) <16 and  count(ALL weightRank) < count(weightRank)    
       then "Fail"
       else "N/A"
  end as grade
from
 (
    select id,name,'m' as subject,marks from #maths
        union all 
    select id,name,'m' as subject,marks from #science
        union all
    select id,name,'m' as subject,marks from #english 
) allmarks

-- allmarks get all records together, and is faster than joining all tables
-- this is also extensible as subjects and students may increase
-- and not all subjects may have marks for all students, so we will not lose data as in case of joins

    join 
        (values (NULL,0, 50),(1,51, 60),(4,61, 75), (16,76,100) 
        as I(weightRank,lowNumber, highNumber)

-- here we create a temp dynamic table to weight the marks 

        on 
            allmarks.marks between I.lowNumber AND I.HighNumber

group by id,name
韩烈
2023-03-14
SELECT m.id, m.name, m.marks, s.marks, e.marks,
CASE WHEN (m.marks > 75 and s.marks > 75) OR (s.marks > 75 and e.marks > 75) OR (m.marks > 75 and e.marks > 75) THEN 'Pass'
     WHEN (m.marks > 75 and (s.marks > 60 OR e.marks > 60)) OR
          (s.marks > 75 and (m.marks > 60 OR e.marks > 60)) OR
          (e.marks > 75 and (s.marks > 60 OR m.marks > 60)) THEN 'Pass'
     WHEN (m.marks < 75 and s.marks < 75 and e.marks < 75 and (m.marks < 50 or e.marks < 50 or s.marks < 50)) THEN 'Fail'
     ELSE NULL END as Merit
FROM #maths m
inner join #science s
on m.ID = s.ID
inner join #English e
on m.ID = e.ID

不太经典,但因为只有几列需要比较,我会这样做

 类似资料:
  • 我正在做一个课程项目飞行雷达模拟器。 情况是,当两架飞机危险地接近时,两架飞机的图像都发生了变化,而当它们处于安全距离时,它们又发生了变化。 问题是,大多数时候,只有一个图像被改成红色,我不知道问题出在哪里。

  • 我正在Groovy中创建一个DSL来进行Httpendpoint测试,我希望它是自然语言ish,并且我有一个带有“with”方法的对象。当我链接命令时,我的方法被正确调用,但如果在变量脚本上调用“with”方法,则编译会失败,因为使用了现有的Groovy“with(Closure)”。DSL脚本文件是通过GroovyShell读取和执行的。 这很有效: 但事实并非如此: 被调用的对象是用Java编

  • 我正在重新学习Hibernate和JPA。我正在使用Spring Boot,Gradle和Postgres为我的环境。我有一组访问Postgres数据库的域对象。两个对象不使用注释,使用一个JDBCTemplate类进行数据库操作。另一组域对象使用JPA注释。JPA对象集具有使用JPA注释映射的关系。当我运行单元测试来检查JDBC模板对象的数据库实体时,一切都很好。当我检查数据库时,我发现使用注释

  • 这将产生以下错误。 不能赋值给引用或变量! Googling会导致很多关于同一主题的点击--组件中的变量和生成的标记的ID之间有冲突。在我看来,这里不是这样。我将组件中唯一的字段重命名为记录,甚至没有看到任何ID被分配给生成的标记。 它告诉我的很少。但这说明了什么,对吧? 组件代码如下所示。

  • 主要内容:大学生自我介绍基本情况【篇1】,大学生自我介绍基本情况【篇2】,大学生自我介绍基本情况【篇3】,大学生自我介绍基本情况【篇4】,大学生自我介绍基本情况【篇5】,大学生自我介绍基本情况【篇6】,大学生自我介绍基本情况【篇7】,大学生自我介绍基本情况模板7篇 大学生自我介绍基本情况?“自我介绍”是大学生面试当中的重要环节,而这个环节的发挥可能会决定了面试结果。下面小编给大家带来了大学生自我介绍基本情况7篇,供大家参考。 大学生自我介绍基本情况【篇1】 各位考官早上好。我是郑州师范学院数学系

  • 我必须这样做的代码,但在密码我不知道怎么做,它是在java 编写一个完整的Java程序,执行以下操作: 要求用户输入他的姓名和学生ID。 根据以下规则为学生生成一个密码:a.生成的密码是4个数字B。第一个数字(第一个数字)是你的学生ID. c.的第一个数字。第二个数字(TENS)是你的学生ID.的第四和第五个数字的总和;如果总和大于9,那么考虑那些:例如,如果总和等于17,则第二位数字将为7。d、