← Questões de Banco de Dados

Banco de Dados · CESPE/CEBRASPE · 2021

Questão comentada de Banco de Dados

create table produtos( id integer primary key, descricao varchar(200) not null, preco numeric(10,2), quantidade numeric(4) ); insert into produtos (id, descricao) values (1,'Livro de Banco de Dados'); insert into produtos (id, descricao, preco) values (2,'Caneta vermelha',2.3); insert into produtos (id, descricao, preco) values (3,'Borracha',0.8); insert into produtos (id, descricao, preco, quantidade) values (4,'Caderno 100 páginas',2.3, 30); insert into produtos (id, descricao, preco, quantidade) values (5,'Lupa Grande',5.9, 5); select count(*), count(preco), sum(preco), count(quantidade), avg(quantidade) from produtos; Assinale a opção que apresenta o resultado correto para as expressões SQL precedentes.

Gabarito: C

Nesta questão, o foco está nas funções de agregação do SQL, que resumem várias linhas em um único resultado. O detalhe mais importante, e a banca adora isso, é o tratamento de valores nulos: COUNT(*) conta todas as linhas, mas COUNT(coluna) conta só os valores não nulos daquela coluna. Já SUM e AVG ignoram nulos automaticamente, trabalhando apenas com os valores existentes. No conjunto inserido, existem 5 registros ao todo, então COUNT(*) resulta em 5. Na coluna preco, só o primeiro produto não recebeu valor; por isso COUNT(preco) vale 4 e a soma fica 2.3 + 0.8 + 2.3 + 5.9 = 11.30. Sem mistério, só aritmética com SQL. Na coluna quantidade, apenas os produtos 4 e 5 têm valor preenchido, então COUNT(quantidade) vale 2. A média é calculada sobre esses dois números: (30 + 5) / 2 = 17.5. Em outras palavras, o SQL não faz média dos nulos, ele simplesmente os ignora. Por isso, a sequência correta é 5, 4, 11.30, 2, 17.50, que corresponde à alternativa C. Esse é um ponto clássico em concursos: a banca testa se você sabe diferenciar COUNT(*) de COUNT(campo) e se lembra de que agregações como SUM e AVG desconsideram NULL.

Continue treinando

Questões relacionadas