Observando que você deseja obter a soma do salário, no Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Observe que a agregação não é um operador relacional, portanto, não fará parte de uma álgebra relacional.
Quanto a
HAVING
, é uma anomalia histórica. Antes do padrão SQL-92, não era possível escrever SELECT
expressões no FROM
cláusula (também conhecida como tabelas derivadas), ou seja, você tinha que fazer todo o trabalho em um SELECT
expressão. Por causa da ordem de avaliação rígida do SQL, o valor agregado não passa a existir após o WHERE
cláusula foi avaliada, ou seja, foi impossível aplicar restrição com base em valores agregados. HAVING
foi introduzido para resolver este problema. Mas mesmo com
HAVING
, o SQL permaneceu relacionalmente incompleto no que diz respeito ao Codd's até que as tabelas derivadas fossem introduzidas. Tabelas derivadas renderizadas HAVING
redundante, mas usando HAVING
ainda é popular (se o Stackoverflow é algo para se usar):as pessoas ainda parecem gostar de usar um único SELECT
sempre que possível e a já mencionada rigidez do SQL quanto à ordem das avaliações (a projeção é realizada por último em um SELECT
expression) torna o uso da tabela derivada bastante detalhado quando comparado a HAVING
.