Отбелязвайки, че искате да получите сумата на заплатата, в Урок D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Забележете, че агрегирането не е релационен оператор, следователно няма да бъде част от релационна алгебра.
Що се отнася до HAVING
, историческа аномалия ли е. Преди стандарта SQL-92 не беше възможно да се напише SELECT
изрази в FROM
клауза (известна още като производни таблици), т.е. трябваше да свършите цялата работа в един SELECT
изразяване. Поради строгия ред на оценка на SQL, обобщената стойност не възниква след WHERE
клаузата е оценена, т.е. невъзможно е да се приложи ограничение въз основа на агрегирани стойности. HAVING
беше въведена за справяне с този проблем.
Но дори и с HAVING
, SQL остана относително непълен по отношение на Codd, докато не бяха въведени производни таблици. Производни таблици, изобразени HAVING
излишен, но използващ HAVING
все още е популярен (ако Stackoverflow е нещо, което трябва да се използва):хората все още изглежда обичат да използват един SELECT
където е възможно и гореспоменатата твърдост на SQL по отношение на реда на оценките (прожектирането се извършва последно в SELECT
израз) прави използването на извлечена таблица доста многословно в сравнение с HAVING
.