Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Equivalente à cláusula GroupBy e Tendo em Álgebra Relacional


Observando que você deseja obter a soma do salário, no Tutorial D :
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )

Observe que a agregação não é um operador relacional, portanto, não fará parte de uma álgebra relacional.

Quanto a HAVING , é uma anomalia histórica. Antes do padrão SQL-92, não era possível escrever SELECT expressões no FROM cláusula (também conhecida como tabelas derivadas), ou seja, você tinha que fazer todo o trabalho em um SELECT expressão. Por causa da ordem de avaliação rígida do SQL, o valor agregado não passa a existir após o WHERE cláusula foi avaliada, ou seja, foi impossível aplicar restrição com base em valores agregados. HAVING foi introduzido para resolver este problema.

Mas mesmo com HAVING , o SQL permaneceu relacionalmente incompleto no que diz respeito ao Codd's até que as tabelas derivadas fossem introduzidas. Tabelas derivadas renderizadas HAVING redundante, mas usando HAVING ainda é popular (se o Stackoverflow é algo para se usar):as pessoas ainda parecem gostar de usar um único SELECT sempre que possível e a já mencionada rigidez do SQL quanto à ordem das avaliações (a projeção é realizada por último em um SELECT expression) torna o uso da tabela derivada bastante detalhado quando comparado a HAVING .