Considere as tabelas A e B e a consulta SQL abaixo:Assinale ...
Considere as tabelas A e B e a consulta SQL abaixo:
Assinale a alternativa correta para o resultado que teremos como retorno da
consulta SQL.
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