学生表:学号,姓名;
例如:
=============
学号 姓名
—
1 张三
2 李四
=============
成绩表:学号,科目,成绩;
===============
学号 科目 成绩
—
1 语文 60
1 数学 59
2 语文 1
2 数学 99
===============
求语句:查询每个学生的学号、姓名、该学生成绩最高的科目;
例如:查询结果应为:
===============
学号 姓名 成绩最高的科目
—
1 张三 语文
2 李四 数学
===============
例如:
=============
学号 姓名
—
1 张三
2 李四
=============
成绩表:学号,科目,成绩;
===============
学号 科目 成绩
—
1 语文 60
1 数学 59
2 语文 1
2 数学 99
===============
求语句:查询每个学生的学号、姓名、该学生成绩最高的科目;
例如:查询结果应为:
===============
学号 姓名 成绩最高的科目
—
1 张三 语文
2 李四 数学
===============
解决方案
10
select *
from 学生表 s inner join 成绩表 c on s.学号=c.学号
and not exists (select 1 from 成绩表 where 学号=c.学号 and 成绩>c.成绩);
from 学生表 s inner join 成绩表 c on s.学号=c.学号
and not exists (select 1 from 成绩表 where 学号=c.学号 and 成绩>c.成绩);
5
SELECT 成绩 ,学号,科目 FROM 成绩表,学生表
WHERE (学生表.学号=成绩表.学号)AND 成绩表.成绩 IN (SELECT MAX(成绩)
FROM 成绩表 WHERE 学号=成绩表.学号 GROUP BY 学号)
或用英文
SELECT SNAME ,CNO,GRADE FROM Score Y,Student
WHERE (STUDENT.SNO=Y.SNO)AND Y.GRADE IN (SELECT MAX(GRADE)
FROM SCORE WHERE SNO=Y.SNO GROUP BY SNO)
WHERE (学生表.学号=成绩表.学号)AND 成绩表.成绩 IN (SELECT MAX(成绩)
FROM 成绩表 WHERE 学号=成绩表.学号 GROUP BY 学号)
或用英文
SELECT SNAME ,CNO,GRADE FROM Score Y,Student
WHERE (STUDENT.SNO=Y.SNO)AND Y.GRADE IN (SELECT MAX(GRADE)
FROM SCORE WHERE SNO=Y.SNO GROUP BY SNO)
5
SELECT a.学号,a.姓名,b.科目 from 学生表 as a
JOIN
(select 学号,科目 from 成绩表 as a
JOIN
(select max(成绩)as 成绩 from 成绩表 GROUP BY 学号)as b
ON a.成绩=b.成绩) b
ON a.学号=b.学号;
JOIN
(select 学号,科目 from 成绩表 as a
JOIN
(select max(成绩)as 成绩 from 成绩表 GROUP BY 学号)as b
ON a.成绩=b.成绩) b
ON a.学号=b.学号;