我正在使用SQL Server数据库。
给定以下查询,我试图获得每个班级的最高分数。该Scores表有两个类的50行,所以我总共要2行。但是,因为我有Scores.Id,所以它返回的每一行都是Scores因为Scores.Id唯一的。当然,简单的解决方案是删除Scores.Id列,除非我需要知道Scores.Id进行其他查找。
Scores
Scores.Id
SELECT Class_Id, Scores.Id, MAX(Scores.ClassScore) AS Score FROM Classes INNER JOIN Scores ON Classes.Id = Scores.Class_Id GROUP BY Scores.Class_Id, Scores.Id
class_id的最高分数很简单
select class_id, max(classScore) score from scores group by class_id
如果您随后需要知道分数表中的哪些行具有最高分数,则可以进行联接。如果每个班级的平均分数不止一个,您可能会得到两行以上。
select id, class_id, classscore from scores s inner join ( select class_id, max(classScore) score from scores group by class_id ) t on t.class_id = s.class_id and t.score = s.classScore
否则我可能会使用CTE
with maxScores as ( select class_id, max(classScore) score from scores group by class_id ) select id, class_id, classscore from scores s on maxScores.class_id = s.class_id and maxScores.score = s.classScore