Suponha que se deseje saber o tipo, a quantidade e o valor m...

Próximas questões
Com base no mesmo assunto
Q762269 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');
Suponha que se deseje saber o tipo, a quantidade e o valor médio dos vinhos em estoque que tenham de três a mais unidades. No nosso banco de dados obteríamos a seguinte tabela: +---------------+------------+--------+ | Tipo do Vinho | Quantidade | Média | +---------------+------------+--------+ | branco | 3 | 261.0 | | tinto | 3 | 215.7 | +---------------+------------+--------+
Assinale a sequência de comandos que retorna esta tabela.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B

A questão aborda conhecimentos sobre a linguagem SQL para a recuperação e agrupamento de dados em um banco de dados. Para resolver a questão, é necessário saber utilizar a cláusula GROUP BY para agrupar registros por um ou mais campos, e a cláusula HAVING para aplicar uma condição a um grupo de registros após esse agrupamento. Além disso, são utilizadas funções de agregação, tais como COUNT() para contar registros e AVG() para calcular a média de um conjunto de valores.

A alternativa correta utiliza a cláusula GROUP BY para agrupar os vinhos por seu tipo (tipoVinho) e em seguida aplica a cláusula HAVING para filtrar apenas os grupos que tenham uma contagem de registros maior ou igual a três (COUNT(*) >= 3). Dessa forma, a consulta retorna o tipo do vinho, a quantidade de vinhos em estoque por tipo e o valor médio dos vinhos para cada agrupamento que satisfaz a condição especificada.

Além disso, a função CAST é utilizada para converter o resultado da média para um valor decimal com uma casa decimal.

O uso correto da cláusula HAVING após a cláusula GROUP BY é o que diferencia a alternativa correta das demais. A alternativa A erra ao tentar utilizar uma condição com WHERE após o GROUP BY, o que é sintaticamente incorreto. A alternativa C utiliza uma sintaxe inexistente com IF que não se aplica ao SQL. A alternativa D tenta utilizar a variável Quantidade diretamente na cláusula HAVING, o que não é possível, pois a cláusula HAVING faz referência a expressões de agregação e não a alias de colunas. A alternativa E também tenta utilizar a cláusula WHERE onde deveria usar HAVING, resultando em um erro sintático.

Portanto, a alternativa B é a correta e está assim formulada:

SELECT
  tipoVinho AS 'Tipo do Vinho',
  COUNT(*) AS 'Quantidade',
  CAST(AVG(precoVinho) AS DECIMAL(5,1)) AS 'Média'
FROM vinhos
GROUP BY tipoVinho
HAVING COUNT(*) >= 3;

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

 B e D terão o mesmo resultado!! Caberia recurso...

Clique para visualizar este comentário

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