Mysql
 sql >> Base de données >  >> RDS >> Mysql

Équivalent de GroupBy et de la clause Have en algèbre relationnelle

En notant que vous voulez obtenir la somme du salaire, dans Tutorial D :

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

L'agrégation de notes n'est pas un opérateur relationnel et ne fera donc pas partie d'une algèbre relationnelle.

Quant à HAVING , est-ce une anomalie historique. Avant la norme SQL-92, il n'était pas possible d'écrire SELECT expressions dans le FROM clause (aka tables dérivées) c'est-à-dire que vous deviez faire tout le travail dans un SELECT expression. En raison de l'ordre d'évaluation rigide de SQL, la valeur agrégée n'existe pas après le WHERE clause a été évaluée, c'est-à-dire qu'il était impossible d'appliquer une restriction basée sur des valeurs agrégées. HAVING a été introduit pour résoudre ce problème.

Mais même avec HAVING , SQL est resté relationnellement incomplet en ce qui concerne Codd jusqu'à ce que les tables dérivées aient été introduites. Tables dérivées rendues HAVING redondant mais utilisant HAVING est toujours populaire (si l'on se fie à Stackoverflow) :les gens semblent toujours aimer utiliser un seul SELECT dans la mesure du possible et la rigidité susmentionnée de SQL en ce qui concerne l'ordre des évaluations (la projection est effectuée en dernier dans un SELECT expression) rend l'utilisation de la table dérivée assez détaillée par rapport à HAVING .