“经典”SQL查询问题,如何避免重复

时间:2016-11-28 20:32:57

标签: sql

我在几个地方看到的这个查询问题被称为“经典SQL问题”。然而,我无法找到解决方案。问题是我无法找到避免结果重复的方法,因为Sam在两次加热时具有相同的速度。

起点是来自比赛的按时间顺序排列的“结果”表:

Id  Name    Club        Engine      Class   Heat    Speed
1   Joe     NYRC        Rotax       Senior  1       320
2   Sam     GMRK        HQ          Senior  1       280
3   Adam    HCRC        Rossi       Senior  1       180
4   Rick    NYRC        Ford        Junior  1       220
5   Joe     NYRC        Rotax       Senior  2       330
6   Sam     GMRK        HQ          Senior  2       280
7   Adam    HCRC        Rossi       Senior  2       190
8   Joe     NYRC        Rotax       Senior  3       300
9   Sam     GMRK        HQ          Senior  3       210
10  Adam    HCRC        Rossi       Senior  3       200

我想要的是在最佳结果之后订购的每个类的结果列表:

Pos Name    Club        Engine      Class   Heat    Speed
1   Joe     NYRC        Rotax       Senior  2       330
2   Sam     GMRK        HQ          Senior  1       280
3   Adam    HCRC        Rossi       Senior  3       200

我能得到什么:

Pos Name    Club        Engine      Class   Heat    Speed
1   Joe     NYRC        Rotax       Senior  2       330
2   Sam     GMRK        HQ          Senior  2       280
3   Sam     GMRK        HQ          Senior  1       280
4   Adam    HCRC        Rossi       Senior  3       200

使用以下查询:

select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, yt.Speed
from Result yt
where Speed = (select max(Speed) from Result st where yt.Name=st.Name)
AND  Class = 'Senior'
Order by Speed DESC

在某处应用distinct似乎是一个好主意,但我无法成功!

感谢您的支持

1 个答案:

答案 0 :(得分:0)

获得Max(速度)并按其他字段分组:

select yt.Name, yt.Club, yt.Engine, yt.Class, yt.Heat, max(yt.Speed) as MaxSpeed
from Result yt
where Class = 'Senior'
group by Name, Club, Engine, Class, Heat
Order by MaxSpeed DESC