Assinale a alternativa que contém o resultado do comando SQL...

Próximas questões
Com base no mesmo assunto
Q762270 Banco de Dados
considerar para sua resposta o banco de dados gerado pelos seguintes trechos de um script em SQL.

CREATE TABLE regioes (
 regiaoID CHAR(2) NOT NULL DEFAULT '',
 nomeRegiao VARCHAR(30) NOT NULL DEFAULT '',
 estadoRegiao VARCHAR(30) NOT NULL DEFAULT '',
 PRIMARY KEY (regiaoID)
);
CREATE TABLE vinicolas (
 vinicolaID INT UNSIGNED NOT NULL AUTO_INCREMENT,
 nomeVinicola CHAR(2) NOT NULL DEFAULT '',
 foneVincola INT UNSIGNED NOT NULL,
 regiaoID CHAR(2) NOT NULL DEFAULT '',
 PRIMARY KEY (vinicolaID),
 FOREIGN KEY (regiaoID) REFERENCES regioes (regiaoID)
);
CREATE TABLE vinhos (
 vinhoID INT UNSIGNED NOT NULL AUTO_INCREMENT,
 nomeVinho CHAR(2) NOT NULL DEFAULT '',
 tipoVinho VARCHAR(6) NOT NULL DEFAULT '',
 precoVinho DECIMAL(7,2) NOT NULL DEFAULT 99999.99,
 vinicolaID INT UNSIGNED NOT NULL,
 PRIMARY KEY (vinhoID),
 FOREIGN KEY (vinicolaID) REFERENCES vinicolas (vinicolaID)
)
INSERT INTO vinhos VALUES
 (10,'V1','tinto',100.00,1),
 (20,'V2','branco',200.00,1),
 (30,'V3','rose',300.00,1),
 (40,'V4','rose',350.00,2),
 (50,'V5','branco',250.00,2),
 (60,'V6','tinto',150.00,2),
 (70,'V7','tinto',397.00,3),
 (80,'V8','branco',333.00,3);
INSERT INTO vinicolas VALUES
 (1,'A1',1234,'R1'),
 (2,'A2',5234,'R1'),
 (3,'A3',6234,'R2'),
 (4,'A4',7234,'R2'),
 (5,'A5',8234,'R3');
INSERT INTO regioes VALUES
 ('R1','Vale S. Francico','Pernambuco'),
 ('R2','Zona da Mata','Pernambuco'),
 ('R3','Garibaldi', 'Rio Grande do Sul'),
 ('R4','Gramado','Rio Grande do Sul');

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;

Alternativas

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