Notera att du vill få summan av lönen i Stutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
Notesaggregering är inte en relationsoperator, och kommer därför inte att utgöra en del av en relationalgebra.
När det gäller HAVING
, är det en historisk anomali. Innan SQL-92-standarden var det inte möjligt att skriva SELECT
uttryck i FROM
klausul (a.k.a härledda tabeller) dvs du var tvungen att göra allt arbete i en SELECT
uttryck. På grund av SQL:s stela utvärderingsordning kommer det aggregerade värdet inte till efter WHERE
klausulen har utvärderats, dvs det var omöjligt att tillämpa begränsningar baserat på aggregerade värden. HAVING
infördes för att lösa detta problem.
Men även med HAVING
, SQL förblev relationellt ofullständig när det gäller Codds tills härledda tabeller hade introducerats. Härledda tabeller renderade HAVING
redundant men använder HAVING
är fortfarande populär (om Stackoverflow är något att gå efter):folk verkar fortfarande gilla att använda en enda SELECT
där det är möjligt och SQLs tidigare nämnda stelhet vad gäller utvärderingsordning (projektionen utförs sist i en SELECT
expression) gör användningen av härledd tabell ganska utförlig jämfört med HAVING
.