sql >> Base de Datos >  >> RDS >> Mysql

Equivalente de la cláusula GroupBy y Have en álgebra relacional

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 .