Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2023

Banco de DadosSQL
Código
fg063584
Banca
FGV
Órgão
DPE-RS
Ano
2023
Nível
Superior
Cargo
Analista - Área de Apoio Especializado - Tecnologia da Informação - Banco de Dados
Considere a execução dos seguintes comandos em SQL:CREATE TABLE vendas (id INT UNSIGNED NOT NULLAUTO_INCREMENT PRIMARY KEY,dat_venda DATETIME NOT NULLDEFAULT CURRENT_TIMESTAMP,vendedor VARCHAR(15) NOT NULL,cliente VARCHAR(15) NOT NULL,uf CHAR(2) NOT NULL DEFAULT 'RJ',produto VARCHAR(15) NOT NULLDEFAULT 'PROD1',qtde INT NOT NULL,valor_unitario FLOAT DEFAULT NULL);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-01', 'VEND001','CLI001', 'SP', 'PROD3', 2, 20);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-02', 'VEND001','CLI001', 'SP', 'PROD3', 3, 20);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-01', 'VEND002','CLI002', 'RJ', 'PROD1', 20, 5);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-05', 'VEND001','CLI001', 'SC', 'PROD3', 2, 20);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-06', 'VEND002','CLI002', 'MG', 'PROD2', 5, 10);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-05', 'VEND003','CLI004', 'RJ', 'PROD3', 2, 20);INSERT INTO vendas (dat_venda, vendedor, cliente, uf, produto, qtde,valor_unitario) VALUES ('2023-01-04', 'VEND003','CLI003', 'SC', 'PROD4', 10, 3);SELECT V1.vendedor, V1.uf, COUNT(*) AS qtde_vendas,SUM(V1.qtde*V1.valor_unitario) AS total_venda,V2.media_vendaFROM vendas V1INNER JOIN(SELECT vendedor,AVG(qtde* valor_unitario) AS media_vendaFROM vendasGROUP BY vendedor) V2ON V2.vendedor = V1.vendedorWHERE V1.dat_vendaBETWEEN '2023-01-01' AND '2023-01-04'GROUP BY V1.vendedor, V1.ufHAVING SUM(V1.qtde*V1.valor_unitario) > V2.media_vendaORDER BY V1.vendedor;Após a execução dos comandos apresentados, a quantidade de linhas que a consulta irá retornar é:
  1. A2;
  2. B3;
  3. C4;
  4. D6;
  5. E7;
Revelar gabarito e comentário

GabaritoA — 2;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Consulta SQL com agregação e HAVING

Gabarito: letra A. A consulta retorna 2 linhas, pois apenas os grupos (VEND001, SP) e (VEND002, RJ) satisfazem simultaneamente o filtro temporal (BETWEEN '2023-01-01' AND '2023-01-04') e a condição do HAVING (soma do valor da venda superior à média do vendedor).

Passo a passo da execução

A tabela vendas contém 7 registros. O filtro WHERE dat_venda BETWEEN '2023-01-01' AND '2023-01-04' seleciona as linhas com datas 01/01, 02/01, 01/01 e 04/01 – um total de 4 linhas (ids 1, 2, 3 e 7).

A subconsulta V2 calcula a média do valor de venda (qtde * valor_unitario) por vendedor, considerando todas as linhas da tabela:

Vendedor

Soma total

Qtde total

Média

VEND001

140

3

46,67

VEND002

150

2

75,00

VEND003

70

2

35,00

As 4 linhas filtradas são agrupadas por vendedor e uf:

Grupo (vendedor, uf)

Linhas

Soma (qtde*valor)

Média do vendedor

Soma > Média?

VEND001, SP

id1,id2

100

46,67

✅ Sim

VEND002, RJ

id3

100

75,00

✅ Sim

VEND003, SC

id7

30

35,00

❌ Não

Cláusula HAVING elimina o grupo VEND003, SC, restando 2 grupos. A ORDER BY não altera a contagem.

  1. 1WHERE (4 linhas)datas 01/01 a 04/01
  2. 2GROUP BY (3 grupos)vendedor + uf
  3. 3HAVING (2 grupos)soma > média vendedor
  4. 4ORDER BYnão altera contagem
LEVEL · soulevel.com.br

Análise das alternativas

  • A) 2 – ✅ Correta: conforme demonstrado.

  • B) 3 – ❌ Incorreta: corresponderia a incluir erroneamente VEND003, SC, mas este é eliminado pelo HAVING.

  • C) 4 – ❌ Incorreta: número de linhas após o WHERE, sem aplicar o HAVING.

  • D) 6 – ❌ Incorreta: número total de linhas da tabela (7) subtraindo ou contagem errada.

  • E) 7 – ❌ Incorreta: total de linhas da tabela sem nenhum filtro.

Gabarito: letra A.

Link permanente: /questoes/fg063584