Este repositório reúne exercícios resolvidos (cases) do curso de SQL para Análise de Dados oferecido pela Fundação Getulio Vargas (FGV). O objetivo é aplicar na prática os conceitos aprendidos ao longo do curso, com foco em consultas, junções, agregações e filtragens de dados.
Cada case apresenta:
Um enunciado prático
O código SQL utilizado na resolução
Uma breve análise do resultado
Identificar os cinco países da Ásia em que os homens com 25 anos de idade tiveram, em média, o menor número de anos de estudo no ano de 2009.
Código SQL:
SELECT m.country,
m.mean_years
FROM men_years_at_school m
JOIN country c ON m.country = c.country
WHERE m.ref_year = 2009
AND c.four_regions LIKE '%asia%'
ORDER BY m.mean_years
LIMIT 5;Análise:
A consulta filtra os países asiáticos no ano de 2009, considerando apenas a média de anos de estudo dos homens com 25 anos. Em seguida, os resultados são ordenados em ordem crescente e são exibidos os cinco países com os menores índices de escolaridade nesse grupo.
Resultado:
Listar os 10 países com maior renda per capita diária no ano de 1985, indicando também a região e a classificação de renda segundo o Banco Mundial.
Código SQL:
SELECT ai.country,
c.wb_regions,
c.wb3income,
ai.mean_usd
FROM avg_income ai
JOIN country c ON ai.country = c.country
WHERE ai.ref_year = 1985
ORDER BY ai.mean_usd DESC
LIMIT 10;Análise:
A consulta relaciona as tabelas de renda média (avg_income) e de classificação/região do Banco Mundial (country). Ela filtra os dados para o ano de 1985 e ordena os países pela renda média diária em dólares americanos, exibindo os 10 maiores valores. Além da renda, a consulta apresenta a região e a classificação de renda do Banco Mundial para cada país listado.
Resultado:
Selecionar os dados do Brasil sobre renda per capita diária, PIB, população, mortalidade infantil, fertilidade e expectativa de vida, para o período de 1900 a 2020, considerando apenas os anos de década (1900, 1910, 1920, ..., 2020).
Código SQL:
SELECT ai.ref_year,
ai.mean_usd,
p.tot_pop,
cm.tot_deaths,
f.mean_babies,
le.tot_years
FROM avg_income ai
JOIN gdp_pc gp ON ai.country = gp.country
AND ai.ref_year = gp.ref_year
JOIN population p ON ai.country = p.country
AND ai.ref_year = p.ref_year
JOIN child_mortality cm ON ai.country = cm.country
AND ai.ref_year = cm.ref_year
JOIN fertility f ON ai.country = f.country
AND ai.ref_year = f.ref_year
JOIN life_expectancy le ON ai.country = le.country
AND ai.ref_year = le.ref_year
WHERE ai.country = 'Brazil'
AND ai.ref_year BETWEEN 1900 AND 2020
AND ai.ref_year % 10 = 0
ORDER BY ai.ref_year;Análise:
A consulta reúne diversos indicadores socioeconômicos para o Brasil, cruzando dados de renda, PIB, população, mortalidade infantil, fertilidade e expectativa de vida. Os dados são filtrados para os anos a cada década, entre 1900 e 2020, permitindo analisar tendências ao longo do tempo.
Resultado:
Pesquisar a taxa de mortalidade infantil e de natalidade nos seis menores países da Europa em termos de extensão territorial — Andorra, Liechtenstein, Malta, Mônaco, San Marino e Vaticano (Holy See) — no ano de 2000. A consulta deve utilizar as tabelas de mortalidade infantil e fertilidade, e aplicar a cláusula LEFT JOIN para garantir que todos os países sejam retornados, mesmo que não possuam dados em ambas as tabelas.
Código SQL (Versão 1):
SELECT cm.country,
cm.tot_deaths,
f.mean_babies
FROM child_mortality cm
LEFT JOIN fertility f ON cm.country = f.country
AND cm.ref_year = f.ref_year
WHERE cm.country IN ('Andorra', 'Liechtenstein', 'Malta', 'Monaco', 'San Marino', 'Holy See')
AND cm.ref_year = 2000;Análise (versão 1):
Neste caso, apenas Malta possui dados na tabela de fertilidade para o ano de 2000. Se tivesse sido utilizado um INNER JOIN, somente Malta apareceria no resultado. O uso de LEFT JOIN permite visualizar todos os países, mesmo aqueles sem dados de natalidade. Um ponto curioso é a alta taxa de mortalidade infantil registrada no Vaticano.
Código SQL (Versão 2):
SELECT cm.country,
cm.tot_deaths,
p.tot_pop,
f.mean_babies
FROM child_mortality cm
LEFT JOIN fertility f ON cm.country = f.country
AND cm.ref_year = f.ref_year
LEFT JOIN population p ON cm.country = p.country
AND cm.ref_year = p.ref_year
WHERE cm.country IN ('Andorra', 'Liechtenstein', 'Malta', 'Monaco', 'San Marino', 'Holy See')
AND cm.ref_year = 2000;Análise (versão 2):
Ao incluir os dados de população, observa-se que o número extremamente reduzido de habitantes no Vaticano pode influenciar artificialmente a taxa de mortalidade infantil, resultando em uma elevação incomum. Essa distorção sugere uma possível inconsistência ou erro nos dados para esse país.
Realize uma consulta que traga, em um único resultado, o tempo médio de permanência na escola para homens e mulheres nos países do grupo BRICS (Brasil, Rússia, Índia, China e África do Sul) no ano de 2000. A consulta deve conter uma coluna adicional para indicar o gênero e permitir comparações diretas entre os países e entre os sexos.
Código SQL:
SELECT m.country,
m.mean_years, 'male' AS gender
FROM men_years_at_school m
WHERE m.country IN ('Brazil', 'Russia', 'China', 'India', 'South Africa')
AND m.ref_year = 2000
UNION
SELECT w.country,
w.mean_years, 'female' AS gender
FROM women_years_at_school w
WHERE w.country IN ('Brazil', 'Russia', 'China', 'India', 'South Africa')
AND w.ref_year = 2000;Análise:
Esta consulta retorna os dados de escolaridade média (em anos) por país e por gênero nos BRICS no ano 2000. A estrutura do resultado permite uma comparação clara entre homens e mulheres em cada país.
A coluna gender é usada para distinguir os dados masculinos e femininos.
A combinação dos resultados oferece uma visão unificada e facilita a análise de desigualdade educacional.
Mulheres podem ter ultrapassado os homens em escolaridade em alguns países, como Rússia.
Em países como Índia ou África do Sul, podem persistir desigualdades significativas.
Resultado:




