Отмечая, что вы хотите получить сумму зарплаты, в Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Примечание. Агрегация не является оператором реляции, следовательно, не будет частью реляционной алгебры.
Что касается HAVING
, это историческая аномалия.До появления стандарта SQL-92 было невозможно записать выражения SELECT
в предложении FROM
(или производные таблицы), т. Е. Всю работу пришлось выполнять в одном выражении SELECT
.Из-за жесткого порядка оценки SQL, агрегатное значение не появляется после того, как было оценено предложение WHERE
, т.е. было невозможно применить ограничение на основе агрегированных значений.HAVING
было введено для решения этой проблемы.
Но даже с HAVING
SQL оставался относительно неполным в отношении Кодда, пока не были введены производные таблицы.Производные таблицы представляются HAVING
избыточными, но использование HAVING
все еще популярно (если Stackoverflow является чем-то необходимым): фолк все еще предпочитает использовать один SELECT
, где это возможно, и вышеупомянутую жесткость SQL в отношении порядка вычислений (выполняется последним в выражении SELECT
) делает использование производной таблицы довольно многословным по сравнению с HAVING
.