Voltar para a lista de artigos Artigos
10 minutos de leitura

Mini-tutorial: Analisar dados meteorológicos reais em SQL e encontrar a melhor época para viajar

Está procurando a época perfeita para tirar férias? Com apenas algumas consultas SQL e dados meteorológicos reais de Szeged, Hungria, você pode descobrir quais meses são quentes, chuvosos ou ótimos para uma caminhada ao sol. Este minitutorial é uma maneira divertida e prática de aprimorar suas habilidades em SQL - e talvez planejar sua próxima viagem enquanto faz isso.

Procurando por sol e pouca chuva?

Planejar as férias não é apenas escolher um destino. É também uma questão de tempo - quando o tempo está realmente agradável?

Com apenas algumas consultas SQL, você pode responder a perguntas como: Qual é o mês mais quente em uma cidade? Quando chove com mais frequência? Os dias de vento são comuns na primavera? Neste tutorial, você trabalhará com dados meteorológicos históricos reais de Szeged, na Hungria, e praticará habilidades essenciais de SQL, como SELECT, GROUP BY, HAVING e ORDER BY. É um miniprojeto prático que combina a prática do mundo real com um pouco de curiosidade sobre viagens.

Deseja se familiarizar com os conceitos básicos primeiro? Experimente o cursoSQL para Iniciantes em LearnSQL.com.br- ele é amigável para iniciantes, interativo e ensina tudo o que você precisa para seguir este tutorial.

Você também pode adaptar essas consultas para analisar o clima em outros locais. API de clima histórico

Procurando dados de outros locais? A API de clima histórico do Open-Meteo é um ótimo recurso gratuito para baixar o histórico do clima por cidade ou coordenada.

O SQL não serve apenas para relatórios e painéis - ele pode até mesmo ajudá-lo a planejar suas próximas férias. Vamos nos aprofundar no assunto.

Primeiros passos: Carregar o conjunto de dados meteorológicos

Usaremos um conjunto de dados público Weather in Szeged 2006-2016 do Kaggle, que contém dados meteorológicos diários de 2006 a 2016.

  1. Baixe os dados: Visite a página do Kaggle e baixe o arquivoweatherHistory.csv
  2. Prepare o arquivo para importação.

Para importar esse arquivo para um banco de dados de sua escolha, é necessário:

  • Remover o +01:00 do Formatted Date. Você pode usar a função Pesquisar e Substituir do seu editor para fazer isso.
  • Renomear os cabeçalhos para usar sublinhados em vez de espaços

Você pode editar o arquivo usando o Excel, o Bloco de Notas ou qualquer editor de texto.

Aqui está a linha de cabeçalho limpa:

formatted_date,summary,precip_type,temperature_c,apparent_temperature_c,humidity,wind_speed_kmh,wind_bearing_deg,visibility_km,pressure_mb,daily_summary
  1. Crie a tabela em seu banco de dados
CREATE TABLE szeged_weather (
  formatted_date TEXT,
  summary TEXT,
  precip_type TEXT,
  temperature_c FLOAT,
  apparent_temperature_c FLOAT,
  humidity FLOAT,
  wind_speed_kmh FLOAT,
  wind_bearing_deg FLOAT,
  visibility_km FLOAT,
  pressure_mb FLOAT,
  daily_summary TEXT
);
  1. Importar o arquivo CSV

No PostgreSQL:

COPY szeged_weather FROM '/path/to/weatherHistory.csv' DELIMITER ',' CSV HEADER;

ou no MySQL:

LOAD DATA INFILE '/path/to/weatherHistory.csv' INTO TABLE szeged_weather
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

Certifique-se de que seu banco de dados esteja configurado para permitir a importação de arquivos.

Passo a passo: Análise dos dados meteorológicos no SQL

Comece explorando os dados

Antes de se aprofundar na análise, é útil entender com que tipo de dados você está trabalhando. Vamos visualizar algumas linhas do conjunto de dados.

Consulta SQL

SELECT *
FROM szeged_weather
LIMIT 5;

Exemplo de saída

formatted_datesummaryprecip_typetemperature_capparent_temperature_chumiditywind_speed_kmhwind_bearing_degvisibility_kmpressure_mbdaily_summary
2016-09-01 00:00:00Partly Cloudyrain21.121.00.8913.02309.51012.3Partly cloudy throughout the day
2016-09-01 01:00:00Mostly Cloudyrain20.720.60.9211.32409.41012.1Partly cloudy throughout the day
2016-09-01 02:00:00Overcastrain20.320.20.9310.72459.21011.9Partly cloudy throughout the day
2016-09-01 03:00:00Overcastrain19.919.80.949.92509.01011.7Partly cloudy throughout the day
2016-09-01 04:00:00Mostly Cloudyrain19.519.40.959.32558.91011.6Partly cloudy throughout the day

Como isso funciona

  • SELECT * retorna todas as colunas - útil para uma primeira olhada.
  • LIMIT 5 retorna apenas as primeiras 5 linhas. Isso mantém o resultado gerenciável e não sobrecarrega o banco de dados.

O que você acabou de praticar

  • Visualização da estrutura de dados
  • Verificação das colunas disponíveis
  • Confirmação do formato e dos tipos de dados

Novo no SQL? O cursoSQL para Iniciantes em LearnSQL.com.br orienta você nessas primeiras etapas de forma interativa - perfeito se você está apenas começando.

O que isso significa para você

Você verá colunas como formatted_date, temperature_c, wind_speed_kmh e summary. Isso lhe dá um contexto do que é possível e de quais campos você pode filtrar ou agrupar posteriormente.

Qual é a temperatura média em Szeged?

Vamos começar com algo simples: a temperatura média em todo o conjunto de dados.

Consulta SQL

SELECT 
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather;

Exemplo de saída

avg_temp
14.6

Como isso funciona

  • AVG() calcula o valor médio.
  • ROUND(..., 1) facilita a leitura mostrando apenas uma casa decimal.

O que você acabou de praticar

  • Agregação básica com AVG()
  • Formatação de saída numérica
  • Obtenção de um número geral a partir de dados brutos

Deseja dominar as funções SQL? Dê uma olhada no Funções Comuns em SQL em LearnSQL.com.br - ele aborda AVG(), SUM(), MIN(), MAX() e muito mais, com exercícios práticos e casos reais de uso

O que isso significa para você

O resultado informa a temperatura média diária em Szeged durante todo o período de 10 anos. Isso é útil como ponto de referência - posteriormente, você poderá comparar meses ou dias específicos com essa linha de base.

Qual mês é mais quente em Szeged?

Você está procurando dias quentes e ensolarados - talvez para visitar os mercados locais, fazer uma caminhada à beira do rio ou simplesmente evitar levar um casaco. Vamos descobrir qual mês tem a temperatura média mais alta em Szeged.

Consulta SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather
GROUP BY month
ORDER BY month;

Exemplo de saída

monthavg_temp
10.4
22.6
37.9
413.5
518.6
622.3
724.9
824.4
919.1
1013.0
116.7
121.5

Como isso funciona

  • EXTRACT(MONTH FROM ...) extrai o mês de cada data.
  • AVG(temperature_c) calcula a temperatura média mensal.
  • ROUND(..., 1) formata-a em uma casa decimal.
  • GROUP BY e ORDER BY estrutura os resultados para facilitar a comparação.

O que você acabou de praticar

  • Agregação com AVG()
  • Trabalho com partes de datas usando EXTRACT()
  • Agrupamento e classificação de resultados de consultas

Deseja praticar de forma mais estruturada?

Experimente a Prática de SQL Group BY em LearnSQL.com.br. Esse curso de nível iniciante concentra-se no uso de GROUP BY com funções agregadas como AVG(), SUM(), MIN() e COUNT() em diferentes cenários e conjuntos de dados. Ele é perfeito para reforçar o que você acabou de praticar em um formato interativo.

O que isso significa para você

  • Julho é o mês mais quente em Szeged, seguido de perto por agosto.
  • Maio e setembro são amenos e bons para aqueles que preferem um clima confortável.
  • Evite os meses de janeiro a março se estiver esperando dias quentes.

Quais são os tipos de clima mais comuns?

Vamos ver que tipo de clima é mais provável de ocorrer, com base na coluna de resumo.

Consulta SQL

SELECT 
  summary,
  COUNT(*) AS occurrences
FROM szeged_weather
GROUP BY summary
ORDER BY occurrences DESC
LIMIT 10;

Exemplo de saída

summaryoccurrences
Partly Cloudy5200
Mostly Cloudy4300
Clear3800
Overcast3100
Foggy1900
Breezy and Partly Cloudy1200
Breezy and Mostly Cloudy1100
Humid and Mostly Cloudy950
Dangerously Windy and Partly Cloudy850
Dry and Mostly Cloudy800

Como isso funciona

  • COUNT(*) registra a frequência com que cada resumo aparece.
  • GROUP BY summary agrupa valores idênticos.
  • ORDER BY ... DESC e LIMIT ajudam a focar nos 10 principais tipos de clima.

O que você acabou de praticar

  • Análise de frequência com COUNT(*)
  • Classificação de resultados em ordem decrescente
  • Limitação de resultados com LIMIT

O que isso significa para você

  • "Parcialmente nublado" é muito comum, portanto, você pode esperar um céu misto.

Se suas férias perfeitas exigem sol constante, verifique com que frequência aparece "Clear" (claro).

Com que frequência chove a cada mês?

O clima quente é ótimo, mas não se estiver chovendo constantemente. Vamos descobrir com que frequência chove em Szeged a cada mês - não apenas a precipitação total, mas quantas horas normalmente incluem chuva.

Cada linha desse conjunto de dados representa uma hora de clima. Portanto, quando calculamos as porcentagens de chuva, estamos respondendo: "De todas as horas em um determinado mês, quantas tiveram chuva?"

Consulta SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(
    SUM(CASE WHEN LOWER(summary) LIKE '%rain%' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
    1
  ) AS percent_rainy
FROM szeged_weather
GROUP BY month
ORDER BY month;

Exemplo de saída

monthpercent_rainy
112.8
210.2
315.3
418.1
521.5
625.6
719.2
816.8
920.4
1017.7
1114.9
1213.3

Como isso funciona

  • EXTRACT(MONTH FROM formatted_date) nos fornece o número do mês (1-12)
  • LOWER(summary) garante a correspondência de palavras como "Rain" (chuva) ou "rain" (chuva)
  • CASE WHEN ... THEN 1 ELSE 0 END verifica cada linha:
    • Se ela contiver "rain" → retorno 1
    • Caso contrário → retorno 0
  • SUM(...) soma todos os 1s - esse é o número de horas de chuva naquele mês
  • COUNT(*) nos dá o total de horas no mês
  • Dividimos, multiplicamos por 100 e arredondamos o resultado para obter uma porcentagem limpa

O que você acabou de praticar

  • Usar EXTRACT() para agrupar dados por mês
  • Aplicar um contador condicional com CASE WHEN dentro SUM()
  • Fazer pesquisas de texto sem distinção entre maiúsculas e minúsculas com LOWER()
  • Cálculo de porcentagens a partir de dados agrupados
  • Formatação de números com ROUND()

Deseja aprimorar ainda mais essas habilidades?

Dê uma olhada no Como Criar Relatórios Básicos em SQL em LearnSQL.com.br. Esse curso interativo aborda como usar funções de agregação (AVG(), COUNT(), SUM()), classificar dados com CASE WHEN e criar relatórios simples usando GROUP BY. É fácil para iniciantes, com cenários do mundo real e mais de 90 exercícios práticos para reforçar o que você aprendeu.

O que isso significa para você

Se estiver planejando férias, isso lhe dará uma visão real:

  • Junho tem uma chance maior de chuva - cerca de 25% de todas as horas
  • Agosto é mais seguro, com menos horas de chuva

Use essa abordagem com outras condições também - neve, neblina ou tempo ensolarado. Basta mudar uma palavra na cláusula LIKE.

Quais dias foram frios e ventosos?

Algumas condições climáticas não aparecem nas médias mensais. Vamos encontrar os dias que foram frios e ventosos - condições que tornam desconfortável estar ao ar livre.

Consulta SQL

SELECT 
  formatted_date,
  temperature_c,
  wind_speed_kmh
FROM szeged_weather
WHERE temperature_c < 5 AND wind_speed_kmh > 30
ORDER BY temperature_c;

Exemplo de saída

formatted_datetemperature_cwind_speed_kmh
2015-01-07 05:00:00-6.434.2
2013-12-01 03:00:00-3.831.7
2014-02-12 08:00:00-2.536.0
2016-01-19 04:00:000.932.5
2012-11-28 01:00:004.233.1

Como isso funciona

  • WHERE filtra as linhas que atendem às duas condições: frio e vento.
  • ORDER BY temperature_c lista-as da mais fria para a mais alta.

O que você acabou de praticar

  • Várias condições em um filtro
  • Operadores lógicos (AND)
  • Classificação por colunas específicas

O que isso significa para você

  • Esses dias são raros, mas rigorosos. A maioria cai entre novembro e março.
  • Isso corrobora a ideia de que Szeged não é ideal para viagens de inverno.

Desafio: Qual foi a temperatura mais quente já registrada?

Aqui está uma chance de aplicar o que aprendeu. Você consegue encontrar a única hora mais quente em todo o conjunto de dados de Szeged?

Tarefa SQL

Você precisará:

  • MAX(temperature_c) encontrar o maior valor registrado
  • ORDER BY temperature_c DESC classificar os dados
  • LIMIT 1 retornar apenas a hora mais quente
  • Ou usar uma subconsulta para retornar a temperatura e a data em que isso aconteceu

Deixaremos a consulta para você. Experimente, teste e veja que tipo de extremos de verão Szeged enfrentou!

Experimente com outras cidades

A melhor parte? Essas consultas funcionam em qualquer lugar. Se você está curioso para saber qual é o mês mais ventoso em Varsóvia ou a estação mais ensolarada em Sydney, basta carregar um conjunto de dados meteorológicos históricos no SQL e começar a explorar.

Você não está apenas praticando - está descobrindo. Dados reais. Perguntas reais. Respostas reais.
E talvez até mesmo seu próximo local de férias.

Deseja aprimorar ainda mais suas habilidades em SQL? LearnSQL.com.br O site oferece cursos práticos e interativos nos quais você escreve e executa SQL em seu navegador. Comece com o cursoSQL para Iniciantes e continue a desenvolver a partir daí.