Zauważ, że chcesz otrzymać sumę wynagrodzenia, w Samouczku D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Agregacja notatek nie jest operatorem relacyjnym, dlatego nie będzie częścią algebry relacyjnej.
Co do HAVING
, czy jest to anomalia historyczna. Przed standardem SQL-92 nie można było napisać SELECT
wyrażenia w FROM
klauzula (tzw. tabele pochodne) tj. musiałeś wykonać całą pracę w jednym SELECT
wyrażenie. Ze względu na sztywną kolejność oceny SQL, wartość zagregowana nie występuje po WHERE
klauzula została oceniona, tj. nie można zastosować ograniczenia na podstawie wartości zagregowanych. HAVING
został wprowadzony w celu rozwiązania tego problemu.
Ale nawet z HAVING
, SQL pozostawał relacyjnie niekompletny w odniesieniu do Codda do czasu wprowadzenia tabel pochodnych. Tabele pochodne renderowane HAVING
nadmiarowe, ale używające HAVING
jest nadal popularny (jeśli Stackoverflow jest czymś, przez co można przejść):ludzie nadal lubią używać jednego SELECT
tam gdzie to możliwe i wyżej wspomnianą sztywność SQL w odniesieniu do kolejności ocen (projekcja jest wykonywana jako ostatnia w SELECT
wyrażenie) sprawia, że użycie tabeli pochodnej jest dość szczegółowe w porównaniu z HAVING
.