Ух, случайно. Мне довелось сделать тот же запрос (хотя и о зарплатах) в БД Lahman Baseball, используя статью об эмуляции функций Oracle Analytic. Эта версия запроса является быстрой, но не такой интуитивно понятной.
select *
from (
select
b.yearID as year,
b.teamID as team,
m.nameFirst as first,
m.nameLast as last,
find_in_set(b.HR, x.teamRank) as rank,
b.HR as HR
from
Batting b
inner join Master m on m.playerID = b.playerID
inner join (select yearID, group_concat(distinct HR order by HR desc) as teamRank from Batting group by yearID) x on x.yearID = b.yearID
) x
where
rank <= 10 and rank > 0
order by
year desc, rank
Или 5 лучших показателей по персоналу на команду за 2010 год ...
select *
from (
select
b.yearID as year,
b.teamID as team,
m.nameFirst as first,
m.nameLast as last,
b.HR as HR,
find_in_set(b.HR, x.teamRank) as rank
from
Batting b
inner join Master m on m.playerID = b.playerID
inner join (select teamID, group_concat(distinct HR order by HR desc) as teamRank from Batting where yearID = 2010 group by teamID) x on x.teamID = b.teamID
where
b.yearID = 2010
) x
where
rank <= 5 and rank > 0
order by
team, rank
limit 12
Показывает эти результаты ...
year team first last HR rank
2010 ARI Mark Reynolds 32 1
2010 ARI Chris Young 27 2
2010 ARI Kelly Johnson 26 3
2010 ARI Adam LaRoche 25 4
2010 ARI Justin Upton 17 5
2010 ATL Brian McCann 21 1
2010 ATL Jason Heyward 18 2
2010 ATL Troy Glaus 16 3
2010 ATL Martin Prado 15 4
2010 ATL Eric Hinske 11 5
2010 BAL Luke Scott 27 1
2010 BAL Ty Wigginton 22 2