Consultas combinadas agregadas y no agregadas en SQL
No estoy seguro de cómo formular esta pregunta, pero quiero una consulta agregada aplicada a varias filas. Esperemos que un ejemplo lo haga más fácil. Suponiendo que tengo los siguientes datos:
player | year | games
-------------------------
ausmubr01 | 2006 | 139
ausmubr01 | 2007 | 117
bondsba01 | 2006 | 130
bondsba01 | 2007 | 126
stairma01 | 2006 | 26
stairma01 | 2006 | 77
stairma01 | 2006 | 14
stairma01 | 2007 | 125
Y para cada jugador en cada año, quiero calcular su "año de carrera", es decir, la cantidad de años que han estado jugando:
player | year | games | cyear
--------------------------------
ausmubr01 | 2006 | 139 | 1
ausmubr01 | 2007 | 117 | 2
bondsba01 | 2006 | 130 | 1
bondsba01 | 2007 | 126 | 2
stairma01 | 2006 | 26 | 1
stairma01 | 2006 | 77 | 2
stairma01 | 2006 | 14 | 3
stairma01 | 2007 | 125 | 4
Sería natural expresar esta transformación comoSELECT player, year, games, year - min(year) + 1 as cyear FROM baseball GROUP by player
pero debido a las reglas para las consultas agregadas, la expresión solo se evalúa una vez para cada grupo:
player | year | games | cyear
--------------------------------
ausmubr01 | 2006 | 139 | 1
bondsba01 | 2006 | 130 | 1
stairma01 | 2006 | 26 | 1
¿Cómo puedo superar este problema en general (es decir, no solo para este caso sino siempre que quiera realizar una operación aritmética combinando una columna existente y un solo número por grupo calculado con una función agregada)?