成绩分组取最大值问题
描述
数据库表结构
create table grade2(
name char(8) not null,
subject char(8) not null,
grade int not null
);数据库中数据
解
效率



Last updated
create table grade2(
name char(8) not null,
subject char(8) not null,
grade int not null
);


Last updated
SELECT name,max(grade),subject FROM grade2 GROUP BY subject;SELECT a.name,a.subject,a.grade FROM grade2 AS a
RIGHT OUTER JOIN
(SELECT max(grade) AS grade , subject FROM grade2 GROUP BY subject) AS b
ON a.grade = b.grade AND a.subject = b.subject;SELECT * FROM grade2 a
WHERE
(
NOT EXISTS(SELECT 1 FROM grade2 c where c.subject = 'math' AND c.grade > a.grade) AND a.subject = 'math')
)
OR
(
NOT EXISTS(SELECT 1 FROM grade2 c WHERE c.subject = 'lang' AND c.grade > a.grade) AND a.subject = 'lang'
)
OR
(
NOT EXISTS(SELECT 1 FROM grade2 c WHERE c.subject = 'english' AND c.grade > a.grade) AND a.subject = 'english'
)#SQL3
SELECT * FROM grade2 a WHERE
NOT EXISTS
(
SELECT 1 FROM grade2 c where c.subject = a.subject AND c.grade > a.grade
);