Tomando nota de que desea obtener la suma del salario, en Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
La agregación de notas no es un operador relacional, por lo que no formará parte de un álgebra relacional.
En cuanto a HAVING
, es una anomalía histórica. Antes del estándar SQL-92, no era posible escribir SELECT
expresiones en el FROM
cláusula (también conocida como tablas derivadas), es decir, tenía que hacer todo el trabajo en un SELECT
expresión. Debido al orden de evaluación rígido de SQL, el valor agregado no aparece después de WHERE
la cláusula ha sido evaluada, es decir, fue imposible aplicar la restricción basada en valores agregados. HAVING
se introdujo para abordar este problema.
Pero incluso con HAVING
, SQL permaneció relacionalmente incompleto con respecto a Codd hasta que se introdujeron las tablas derivadas. Tablas derivadas renderizadas HAVING
redundante pero usando HAVING
sigue siendo popular (si se tiene en cuenta Stackoverflow):a la gente todavía parece gustarle usar un solo SELECT
donde sea posible y la rigidez de SQL antes mencionada en cuanto al orden de las evaluaciones (la proyección se realiza en último lugar en un SELECT
expresión) hace que el uso de tablas derivadas sea bastante detallado en comparación con HAVING
.