mysql 数据库 无论哪种情况都输出模块1成绩+模块2成绩和成绩最高的记录 查询所有成员最终的考核结果,结果如模板所示写出查询语句

问题:
考试通过的定义:模块1考试成绩 >=60模块2考试成绩 >=60
每个人有多次考试记录,有一次通过则通过,若全部未通过,则为未通过
无论哪种情况都输出模块1成绩+模块2成绩和成绩最高的记录
查询所有成员最终的考核结果,结果如模板所示写出查询语句
最终结果

img


表及数据语句
create table if not exists sql_2005(
考试编号 INT(10) PRIMARY KEY,
姓名 VARCHAR(10),
模块1考试成绩 INT(10),
模块2考试成绩 INT(10)
);
INSERT INTO sql_2005 VALUES
(1,'A',35,43),
(2,'B',78,65),
(3,'C',43,48),
(4,'A',59,67),
(5,'A',84,81),
(6,'C',58,59),
(7,'B',89,60),
(8,'D',59,94),
(9,'D',65,75),
(10,'D',84,63);

代码如下:望采纳

SELECT
    考试编号,姓名,模块1考试成绩,模块2考试成绩,
CASE WHEN 
    模块1考试成绩 >= 60 AND 模块2考试成绩 >=60 THEN "考试通过" ELSE "考试未通过" END AS 考试结果 
FROM
    sql_2005

A有多次通过 ,只显示一次成绩。
可以看到显示通过的,如果通过次数多就将两门成绩最高着显示出来。因此这道题
没有通过的,也显示成绩最好的一次。

引用上面老哥的SQL加一层发号函数然后取第一条就行,取最高成绩你没说很细我就直接取模块一二的顺序高低了,有需要可以细化比如模块一加二排序之类,发号函数可以多套一层子查询结果精准些,手机上不好敲SQL你参照一下就好

select * from (
SELECT
    考试编号,姓名,模块1考试成绩,模块2考试成绩,
CASE WHEN 
    模块1考试成绩 >= 60 AND 模块2考试成绩 >=60 THEN "考试通过" ELSE "考试未通过" END AS 考试结果 ,
  row_number() over(partition by 姓名 order by 模块一成绩 desc, 模块二成绩 desc) rn
FROM
    sql_2005
) tmp where rn =1