限制最大和分组依据返回太多行

问题描述

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