小编典典

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

sql

我正在使用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

阅读 195

收藏
2021-04-22

共1个答案

小编典典

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
2021-04-22