Beachten Sie, dass Sie die Gehaltssumme erhalten möchten, in Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Die Notenaggregation ist kein relationaler Operator und wird daher nicht Teil einer relationalen Algebra sein.
Wie für HAVING
, ist es eine historische Anomalie. Vor dem SQL-92-Standard war es nicht möglich, SELECT
zu schreiben Ausdrücke im FROM
-Klausel (auch bekannt als abgeleitete Tabellen), d. h. Sie mussten die gesamte Arbeit in einem SELECT
erledigen Ausdruck. Aufgrund der starren Auswertungsreihenfolge von SQL entsteht der Aggregatwert nicht nach WHERE
Klausel wurde ausgewertet, d. h. es war unmöglich, eine Beschränkung basierend auf aggregierten Werten anzuwenden. HAVING
wurde eingeführt, um dieses Problem zu lösen.
Aber auch mit HAVING
, blieb SQL bezüglich Codds relational unvollständig, bis abgeleitete Tabellen eingeführt wurden. Abgeleitete Tabellen, die HAVING
gerendert werden redundant, aber mit HAVING
ist immer noch beliebt (wenn man von Stackoverflow ausgehen kann):Die Leute scheinen immer noch gerne ein einzelnes SELECT
zu verwenden wo möglich und die erwähnte Starrheit von SQL in Bezug auf die Reihenfolge der Auswertungen (Projektion wird zuletzt in einem SELECT
durchgeführt Ausdruck) macht die Verwendung abgeleiteter Tabellen im Vergleich zu HAVING
recht ausführlich .