Nie wiem, jak sformułować to pytanie, ale chcę, aby zapytanie zbiorcze było stosowane do wielu wierszy. Mam nadzieję, że przykład ten powinien ułatwić to. Zakładając, że mam następujące dane:Połączone zapytanie zagregowane i niepołączone w SQL
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
A dla każdego gracza w każdym roku, chcę obliczyć ich „letniej karierze”, czyli liczba lat zostały one rozgrywane:
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
byłoby naturalne, aby wyrazić tę transformację jako SELECT player, year, games, year - min(year) + 1 as cyear FROM baseball GROUP by player
ale z powodu przepisów dotyczących zagregowanych zapytań wyrażenie jest obliczane tylko raz dla każdej grupy:
player | year | games | cyear
--------------------------------
ausmubr01 | 2006 | 139 | 1
bondsba01 | 2006 | 130 | 1
stairma01 | 2006 | 26 | 1
jak mogę przezwyciężyć problem ogólnie (tj. nie tylko w tym przypadku, ale zawsze, gdy chcę wykonać operację arytmetyczną, łączącą istniejącą kolumnę i pojedynczy numer na grupę obliczoną za pomocą funkcji agregującej)?
Proszę podać RDBMS, które są kierowane przez dodanie odpowiedniego znacznika (Oracle, SQL Server, MySQL, itd.) być może odpowiedzi, które wykorzystują języka lub produktu funkcje, które nie są powszechnie obsługiwane. Ponadto, oznaczając je konkretnym RDBMS, twoje pytanie może zostać zwrócone przez osoby lepiej dostosowane do tego, aby na nie odpowiedzieć – Taryn
@blue stóp Jestem zainteresowany odpowiedziami, które odnoszą się szeroko, nie do konkretnego RDBMS. – hadley