Чтобы получить единую промежуточную сумму подсчетов и средних значений, просто оберните исходный запрос КАК внутренний выбор ... что-то вроде ... (pq = "PreQuery" результат выбора)
Select
max( "Tot Players" ) Players,
max( "->" ) position,
count(*) Year,
avg( pq.age ) AvgAge,
avg( pq.gp ) AvgGP,
avg( pq.goals ) AvgGoals,
avg( pq.assists ) AvgAssists,
avg( pq.sim ) AvgSim
from
( SELECT
px.player,
px.pos,
px.year,
px.age,
px.gp,
px.goals,
px.assists,
1000 - ABS(p1.gp - px.gp)
- ABS(p1.goals - px.goals)
- ABS(p1.assists - px.assists) sim
FROM
hockey p1
JOIN hockey px ON px.player <> p1.player
WHERE
p1.player = 'John Smith'
AND p1.year = 2010
HAVING
sim >= 900
ORDER BY
sim DESC ) pq
Если ваш исходный запрос сработал, вы должны получить ваши общие средние значения. Однако с запросом INNER, имеющим порядок и порядок, может возникнуть проблема. Возможно, вам придется убить порядок, поскольку в самом внешнем запросе он не имеет значения. Что касается предложения HAVING в запросе INNER, может потребоваться переместить его в WHERE pq.sim> = 900 в OUTER SQL-Select.
Кроме того, если вы хотите, чтобы результаты всех игроков были первыми, ТОГДА итого, возьмите исходный запрос и объедините его с этим ... Как вы увидите, чтобы синхронизировать столбцы с ОБА запросами, я мы поставили фальшивку для игрока и позиции, чтобы она не рухнула на несовпадающие союзы ... Обратите внимание, что мой столбец COUNT фактически будет соответствовать столбцу YEAR в ОРИГИНАЛЬНОМ запросе.
За предыдущий год ... Как упоминал Роб, вы просто выполняете СОЮЗ из двух запросов, просто показывая соответствующий год, в котором вы проходили отбор в каждом СОЮЗЕ ...
РЕДАКТИРОВАТЬ --- РАЗЪЯСНЕНИЕ на 2-й ГОД ....
Согласно вашему последующему пояснению к комментарию, вы должны будете получить основу в качестве основы для года +1 ... если вы затем захотите снова получить общие средние значения, они будут перенесены во внешний max / avg и т. Д. Но я думаю, что это то, что вы хотите в следующем году на игрока
SELECT
PrimaryQry.PrimaryPlayer,
PrimaryQry.PrimaryPos,
PrimaryQry.PrimaryYear,
PrimaryQry.PrimaryAge,
PrimaryQry.PrimaryGP,
PrimaryQry.PrimaryGoals,
PrimaryQry.PrimaryAssists,
PrimaryQry.player,
PrimaryQry.pos,
PrimaryQry.year,
PrimaryQry.age,
PrimaryQry.gp,
PrimaryQry.goals,
PrimaryQry.assists,
PrimaryQry.sim,
p2.pos PrimaryPos2,
p2.year PrimaryYear2,
p2.age PrimaryAge2,
p2.gp PrimaryGP2,
p2.goals PrimaryGoals2,
p2.assists PrimaryAssists2,
px2.player player2,
px2.pos pos2,
px2.year year2,
px2.age age2,
px2.gp gp2,
px2.goals goals2,
px2.assists assists2,
1000 - ABS(p2.gp - px2.gp)
- ABS(p2.goals - px2.goals)
- ABS(p2.assists - px2.assists) sim2
FROM
( SELECT
p1.player PrimaryPlayer,
p1.pos PrimaryPos,
p1.year PrimaryYear,
p1.age PrimaryAge,
p1.gp PrimaryGP,
p1.goals PrimaryGoals,
p1.assists PrimaryAssists,
px.player,
px.pos,
px.year,
px.age,
px.gp,
px.goals,
px.assists,
1000 - ABS(p1.gp - px.gp)
- ABS(p1.goals - px.goals)
- ABS(p1.assists - px.assists) sim
FROM
hockey p1
JOIN hockey px
ON p1.player <> px.player
WHERE
p1.player = 'John Smith'
AND p1.year = 2010
HAVING
sim >= 900 ) PrimaryQry
JOIN hockey p2
ON PrimaryQry.PrimaryPlayer = p2.player
AND PrimaryQry.PrimaryYear +1 = p2.year
JOIN hockey px2
ON PrimaryQry.Player = px2.Player
AND PrimaryQry.Year +1 = px2.year
Если вы будете следовать логике здесь, вы уже знаете, что внутренний запрос возвращает около 10 других игроков. Итак, я веду статистику от первого лица в этом запросе тоже. ПОТОМ, я присоединяюсь к этому результату обратно к хоккейной таблице ДВАЖДЫ ... Объединение - это основной игрок, присоединившийся к первому за его / ее год +1, ВТОРОЕ объединение работает специально с одним человеком, который квалифицирован против основного игрока. В итоговых результатах столбца указывается квалификатор первого года со вторым классификатором, например
So, it will all be on one row consecutively of
John Smith 2010 Compare Person 1 YearA John Smith 2011 Compare Person 1 YearA+1
John Smith 2010 Compare Person 2 YearB John Smith 2011 Compare Person 2 YearB+1
John Smith 2010 Compare Person 3 YearC John Smith 2011 Compare Person 3 YearC+1