Assinale a alternativa que contém o resultado do comando SQL...
Assinale a alternativa que contém o resultado do comando SQL.
SELECT
tipoVinho AS `Tipo`,
MAX(precoVinho) `Max`,
MIN(precoVinho) `Min`,
CAST(AVG(precoVinho) AS DECIMAL(5,1)) AS `Média`
FROM vinhos
GROUP BY tipoVinho
WITH ROLLUP;
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A
Para resolver essa questão, é necessário entender o funcionamento do GROUP BY e a cláusula WITH ROLLUP em SQL, além das funções de agregação MAX(), MIN() e AVG(), e como fazer o casting de tipos com CAST().
O comando GROUP BY é utilizado em conjunto com as funções de agregação para agrupar as linhas que contêm os mesmos valores em determinadas colunas e, depois, realizar cálculos sobre cada grupo de linhas.
A cláusula WITH ROLLUP é um complemento do GROUP BY que permite adicionar uma linha extra ao resultado que representa os valores agregados de todas as linhas sumarizadas pelo GROUP BY. Esta linha extra tem NULL como valor na coluna agrupada, indicando a subtotais ou totais.
As funções MAX() e MIN() retornam, respectivamente, o maior e o menor valor de uma coluna para cada grupo definido pelo GROUP BY. A função AVG(), por outro lado, calcula a média dos valores de uma coluna para cada grupo.
O uso de CAST() como DECIMAL(5,1) na função AVG() serve para converter o resultado da média para um valor decimal com uma casa após a vírgula, conforme especificado no DECIMAL(5,1).
Analisando o comando SQL fornecido, temos a seguinte interpretação:
- Selecionamos o tipo de vinho (tipoVinho renomeado para 'Tipo')
- Calculamos o preço máximo (MAX(precoVinho) renomeado para 'Max')
- Calculamos o preço mínimo (MIN(precoVinho) renomeado para 'Min')
- Calculamos a média de preço (AVG(precoVinho) renomeado para 'Média' e convertido para DECIMAL(5,1))
- Agrupamos os resultados pelo tipo de vinho (GROUP BY tipoVinho)
- Incluímos uma linha de subtotais para todos os tipos de vinho usando (WITH ROLLUP)
A alternativa A é a correta porque apresenta exatamente o resultado esperado após a execução desse SQL, trazendo as linhas com os valores máximos, mínimos e a média para cada tipo de vinho, além de uma linha final com os valores agregados de todos os vinhos, onde o tipo de vinho é representado por NULL.
+--------+--------+--------+--------+
| Tipo | Max | Min | Média |
+--------+--------+--------+--------+
| branco | 333.00 | 200.00 | 261.0 |
| rose | 350.00 | 300.00 | 325.0 |
| tinto | 397.00 | 100.00 | 215.7 |
| NULL | 397.00 | 100.00 | 260.0 |
+--------+--------+--------+--------+
Observe que a linha com NULL no campo 'Tipo' apresenta o maior preço (Max), o menor preço (Min) e a média de preços (Média) de todos os registros da tabela vinhos, indicando os valores agregados como subtotais de todos os tipos de vinho.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Se não fosse pela cláusula 'WITH ROLLUP' a resposta seria letra (E), contudo com tal declaração, é calculado o agrupamento de MAX, MIN e AVG geral. Sendo assim, a resposta é a letra (A)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo