Equivalente de la cláusula GroupBy and Having en álgebra relacional

Estaba haciendo una tarea en la que tuve que convertir las consultas SQL en consultas de Algebra Relacional. Me quedé atrapado en la conversión del group by cláusula.

¿Podría alguien decirme cómo se puede escribir la cláusula group by en álgebra relacional?

p.ej:

 SELECT job, sal FROM emp GROUP BY job ; 

¡Gracias!

En primer lugar, su consulta es incorrecta; no puede seleccionar algo que no haya agrupado a less que use la agregación. Supongo que quieres get la sum de la sal.

trabajo F sum (sal), trabajo (emp).

Observando que desea get la sum del salario, en el Tutorial D :

 SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal ) 

La agregación de notas no es un operador relacional, por lo tanto, 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 expresiones SELECT en la cláusula FROM (también conocidas como tablas derivadas), es decir, había que hacer todo el trabajo en una expresión SELECT . Debido al order de evaluación rígido de SQL, el valor agregado no aparece después de que se haya evaluado la cláusula WHERE es decir, era imposible aplicar la restricción en function de los valores agregados. HAVING fue presentado para abordar este problema.

Pero incluso con HAVING , SQL permaneció relacionalmente incompleto en lo que respecta a Codd hasta que se introdujeron las tablas derivadas. Las tablas derivadas HAVING networkingundantes, pero usar HAVING sigue siendo popular (si Stackoverflow es aceptable): parece que a las personas les gusta usar SELECT siempre que sea posible y la rigidez antes mencionada de SQL en cuanto al order de las evaluaciones (la proyección se realiza al final en una expresión SELECT ) hace que el uso de tablas derivadas sea bastante detallado cuando se compara con HAVING .