问题描述
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
解决方法
我正在使用SQL Server数据库。
给定以下查询,我试图获得每个班级的最高分数。该Scores
表有两个类的50行,所以我总共要2行。但是,因为我有Scores.Id
,所以它返回的每一行都是Scores
因为Scores.Id
唯一的。当然,简单的解决方案是删除Scores.Id
列,除非我需要知道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