Considere as tabelas A e B e a consulta SQL abaixo:Assinale ...

Próximas questões
Com base no mesmo assunto
Q947313 Banco de Dados

Considere as tabelas A e B e a consulta SQL abaixo:

Imagem associada para resolução da questão

Assinale a alternativa correta para o resultado que teremos como retorno da consulta SQL.

Alternativas

Comentários

Veja os comentários dos nossos alunos

Itens importantes a saber:

Group By Valor: agrupamento por valores, eliminando duplicados.

Having avg(valor)>4: apenas valores que a média seja maior que 4.


select 8 from b - Vai fazer com que tenhamos 8 e 8 na consulta, porém, no group by teremos apenas 8 (Pelo fato de termos valor repetido 5 e 5). Porém o AVG vai fazer com que o resultado final seja 8 e 8 nessa consulta.


select valor from a - vai retornar todos os valores, porém, o avg vai fazer com que seja considerado apenas o 8.


Sendo assim, o select sum (valor) vai considerar 8 + 8 + 8 = 24. Gabarito E


Alguém sabe se essas questões são retiradas de algum livro?

O pulo do gato nessa questão é entender que, após acontecer o UNION ALL entre os dois selects que estão entre parênteses (resultará numa tabela contendo 0,4,8,8 e 8), a consulta faz o SUM dos valores agrupados, ou seja, somará os valores que são iguais.

Desse modo, o resultado será 0,4,24.

Após isso, será impresso o resultado cuja média é maior que 4 (24/3=8).

HAVING : É Similar ao where que busca um determinado valor porém quando tivermos o group by em um sql nós trazemos o group by.

UNIALL all : mantém os valores duplicado.

SUM: soma do campo valor

Tabela A: 0 4 8

Fazendo uma união sem duplicada union all

Tabela b 5 5

Note que na query select 8 from b ,inclui o valor 8 para cada linha na tabela b.

então temos na tabela b ,8 8. Se tem duas linhas na tabela B com o valor 5 retorna duas linhas com o valor 8.

A união de duas tabelas A e B renomeando Tabela:

Tabela 0 , 4 , 8 , 8 e 8.

Group by na query - para Cada linha da tabela e agrupa os iguais.

Valor_tabela - linha_agrupada

0 -       0

4 -       1

8 -       3 sum (8 + 8 + 8)

having avg(valor)>4

retorna linha 24 pois é maior que 4.

Alternativa E.

SELECT SUM(VALOR)

FROM (

        SELECT VALOR FROM A

        UNION ALL

        SELECT 8 FROM B

) AS TABELA

GROUP BY VALOR

HAVING AVG (VALOR) > 4

 

1) Executa "SELECT VALOR FROM A"

Resultado: 0, 4, 8

 

2) Executa "SELECT 8 FROM B"

Isso vai retornar o valor "8" para cada linha de B

Resultado: 8, 8

 

3) Executa "UNION ALL" entre os dois últimos resultados

O "union all" vai unir as linhas mantendo todas as duplicidades

Resultado: 0, 4, 8, 8, 8

 

4) Executa "GROUP BY VALOR"

Vai agrupar as linhas com os mesmos valores para a coluna "valor"

Resultado:

"0" -> 1 registro

"4" -> 1 registro

"8" -> 3 registros

 

5) Executa "HAVING AVG(VALOR) > 4"

Para cada grupo formado, calcula a média dos seus elementos, removendo os grupos cuja média não é maior do que 4

AVG(0) = 0 -> REMOVE

AVG(4) = 4 -> REMOVE

AVG(8, 8, 8) = 8 -> MANTÉM

Resultado:

"8" -> 3 registros

 

6) Executa "SELECT SUM(VALOR)"

Para o grupo restante, soma os valores contidos na coluna "valor" de cada elemento

8+8+8 = 24

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo