如图所示,分为姓名ABCD考试结果一次是通过就通过,一次没有就不通过,不管通过没有输出他们的最高成绩

微信图片_20210722171004.png

yzm521611 发布于 2021-7-22 17:11 (编辑于 2021-7-22 17:15)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
杨朝健Lv5中级互助
发布于2021-7-22 17:17(编辑于 2021-7-22 17:19)

select id as "考试编号"

,name as "姓名"

,module1 as "模块1考试成绩"

,module2 as "模块2考试成绩"

,case when module1>=60 and module2>=60 then '考试通过' else '考试未通过' end as "考试结果"

from exam  a

-- 如果有通过,则把没通过的记录都过滤掉

where not exists (

  select 1 from exam

  where name=a.name

  and (case when module1>=60 and module2>=60 then 1 else 0 end)>(case when a.module1>=60 and a.module2>=60 then 1 else 0 end)

)

-- 保留通过和没通过各自的最高分

and not exists (

  select 1 from exam

  where name=a.name

  and (case when module1>=60 and module2>=60 then 1 else 0 end)=(case when a.module1>=60 and a.module2>=60 then 1 else 0 end)

  and (module1+module2)>(a.module1+a.module2)

)

最佳回答
0
烟尘Lv6高级互助
发布于2021-7-22 17:14

先查每人每科的通过情况

然后结果排重

然后判断,如果一个人一条结果且为通过的合格,其余情况不合格

最佳回答
0
Kevin-sLv7中级互助
发布于2021-7-22 17:16

反过来写,两次都没过就是不通过,其他都是通过即可

模块一和模块二都小于60不通过,其余都通过

最佳回答
0
HHHHH123Lv7中级互助
发布于2021-7-22 17:19

考试结果那列通过则为1,不通过0   sum汇总一下好了,最高成绩max

  • 5关注人数
  • 508浏览人数
  • 最后回答于:2021-7-22 17:19
    请选择关闭问题的原因
    确定 取消
    返回顶部