Notando che vuoi ottenere la somma dello stipendio, in Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
L'aggregazione delle note non è un operatore relazionale, quindi non farà parte di un'algebra relazionale.
Come per HAVING
, è un'anomalia storica. Prima dello standard SQL-92, non era possibile scrivere SELECT
espressioni nel FROM
clausola (aka tabelle derivate) cioè dovevi fare tutto il lavoro in un unico SELECT
espressione. A causa del rigido ordine di valutazione di SQL, il valore aggregato non viene visualizzato dopo WHERE
è stata valutata la clausola, ovvero non è stato possibile applicare la restrizione sulla base di valori aggregati. HAVING
è stato introdotto per affrontare questo problema.
Ma anche con HAVING
, SQL è rimasto relazionalmente incompleto per quanto riguarda Codd fino a quando non sono state introdotte tabelle derivate. Tabelle derivate renderizzate HAVING
ridondante ma utilizzando HAVING
è ancora popolare (se Stackoverflow è qualcosa su cui basarsi):alla gente piace ancora usare un singolo SELECT
ove possibile e la suddetta rigidità di SQL per quanto riguarda l'ordine delle valutazioni (la proiezione viene eseguita per ultima in un SELECT
expression) rende l'utilizzo della tabella derivata piuttosto dettagliato rispetto a HAVING
.