Questão nº 86
Questão de Engenharia de Dados · FCC PMSP Analista TIC 2025 (nº 86)
Para atender aos requisitos de um departamento municipal de produtos agrícolas sobre a movimentação temporal entre locais dos produtos estocados, uma Analista criou e populou as seguintes tabelas Fato e Dimensões usando o modelo snowflake:
Tabela Fato:
```sql
CREATE TABLE FatoEstoque (
id INT PRIMARY KEY,
data DATE,
local_id INT,
produto_id INT,
volume INT
);
```
Tabelas Dimensões:
```sql
CREATE TABLE DimLocal (
local_id INT PRIMARY KEY,
nome_local VARCHAR(100),
endereco VARCHAR(255)
);
CREATE TABLE DimProduto (
produto_id INT PRIMARY KEY,
nome_produto VARCHAR(100),
categoria VARCHAR(100)
);
CREATE TABLE DimData (
data DATE PRIMARY KEY,
ano INT,
mes INT,
dia INT
);
```
A seguir, ela escreveu corretamente a seguinte consulta SQL, que somou os produtos estocados em cada local para os anos de 2023 e 2024 e ordenou os resultados do local mais movimentado para o menos movimentado:
- A```sql
SELECT l.nome_local, SUM(f.volume) AS total_volume
FROM FatoEstoque f
JOIN DimLocal l ON f.local_id = l.local_id
JOIN DimData d ON f.data = d.data
WHERE d.ano IN (2023, 2024)
GROUP BY l.nome_local
ORDER BY total_volume DESC;
``` (alternativa correta) - B```sql
SELECT l.nome_local, SUM(f.volume) AS total_volume
FROM FatoEstoque f
JOIN DimLocal l LIKE f.local_id = l.local_id
JOIN DimData d LIKE f.data = d.data
WHERE d.ano SUM (2023, 2024)
GROUP BY l.nome_local
ORDER BY total_volume DESC;
``` - C```sql
SELECT l.nome_local, ON(f.volume) AS total_volume
FROM FatoEstoque f
JOIN DimLocal l ON f.local_id = l.local_id
JOIN DimData d ON f.data = d.data
WHERE d.ano MAX(2023, 2024)
GROUP BY l.nome_local
ORDER BY total_volume DESC;
``` - D```sql
SELECT l.nome_local, FOR (f.volume) AS total_volume
FROM FatoEstoque f
JOIN DimLocal l WITH f.local_id = l.local_id
JOIN DimData d WITH f.data = d.data
WHERE d.ano IN (2023, 2024)
GROUP BY l.nome_local
ORDER BY total_volume DESC;
``` - E```sql
SELECT l.nome_local, SUM(f.volume) AT total_volume
FROM FatoEstoque f
JOIN DimLocal l IN f.local_id = l.local_id
JOIN DimData d IN f.data = d.data
WHERE d.ano SUM(2023, 2024)
GROUP BY l.nome_local
ORDER BY total_volume DESC;
```
Resposta comentada
Gabarito Alternativa A
Em SQL, para analisar dados de diferentes tabelas, usamos JOIN para conectá-las por colunas relacionadas. Para calcular totais, usamos funções de agregação como SUM(), e para agrupar esses totais por categorias, usamos GROUP BY. Para filtrar dados por condições específicas, usamos WHERE, e para ordenar os resultados, usamos ORDER BY.
- (A) Correta: Esta consulta usa a sintaxe SQL padrão e correta para todos os requisitos.
JOIN ... ONconecta as tabelas,SUM(f.volume)calcula o total de produtos,AS total_volumedá um nome ao resultado,WHERE d.ano IN (2023, 2024)filtra os anos desejados,GROUP BY l.nome_localagrupa os totais por local, eORDER BY total_volume DESCordena do maior para o menor volume. - (B) Incorreta: O uso de
LIKEemJOIN DimLocal l LIKE f.local_id = l.local_idestá incorreto; o correto éON. Além disso,WHERE d.ano SUM (2023, 2024)está errado;SUMé uma função de agregação, não um operador de comparação, e o correto seriaINpara verificar se o ano está na lista. (Armadilha da banca: ConfundeLIKE(comparação de padrões) comON(condição de junção) eSUM(agregação) comIN(verificação de lista), usando palavras-chave SQL em contextos errados.) - (C) Incorreta:
ON(f.volume)está incorreto; a função de agregação para soma éSUM().WHERE d.ano MAX(2023, 2024)também está errado;MAXé uma função de agregação, e o correto seriaIN. - (D) Incorreta:
FOR (f.volume)está incorreto; a função de agregação para soma éSUM().JOIN DimLocal l WITH f.local_id = l.local_idestá incorreto; o correto éON.WITHé usado para Common Table Expressions (CTEs), não para condições deJOIN. - (E) Incorreta:
SUM(f.volume) AT total_volumeestá incorreto; o correto para dar um alias éAS total_volume.JOIN DimLocal l IN f.local_id = l.local_idestá incorreto; o correto éON.WHERE d.ano SUM(2023, 2024)está errado; o correto seriaIN.
Fonte: FCC PMSP Analista TIC 2025 Analista de Planejamento e Desenvolvimento Organizacional - Tecnologia da Informação e Comunicação (Caderno Tipo 001). Reproduzida para fins de estudo.